window.frames && iframe 跨页面通信
1.定义
frames[]是窗口中所有命名的框架组成的数组。这个数组的每个元素都是一个Window对象,对应于窗口中的一个框架。
2.用法
假设iframe 是一个以存在的 iframe 的 ID 和 NAME 值,获取iframe的方法有:
document.getElementById(“iframe”); (获取的是 iframe 元素,可改变iframe的 src 或者 border , scrolling 等 attributes)
window.frames[“iframe”]; // window.frames[window.frames.length - 1] (获取的是window窗体,可通过其 document 属性操作dom, 可使用iframe内的函数、变量)
例子:
$(window.frames["iframe"].document).find("#name").val("");
3. 扩展 iframe 跨页面通信
parent.html
<html> <head>
<style>
h1{
color: #5dd;
}
</style> </head> <body>
<h1>parent</h1>
<input id="button" type="button" value="调用child.html中的函数say()" onclick="callChild()" />
<iframe name="myFrame" id="iframea" src="child.html" onload="load()"></iframe>
<script type="text/javascript">
function say() {
alert("parent.say");
} function callChild() {
myFrame.window.say();
myFrame.window.document.getElementById("button").value = "parent调用结束";
}
function load(){
// console.log(document.getElementById('iframea').contentDocument.getElementById('button'));
console.log(document.getElementById('iframea').contentWindow.document.getElementById('button')); } </script>
</body> </html>
child.html
<html> <head>
<style>
body{
background-color: #666;
}
h1{
color:red;
}
</style>
</head> <body>
<h1>chlid</h1>
<input id="button" type="button" value="调用parent.html中的say()函数" onclick="callParent()" />
<script type="text/javascript">
function say() {
alert("child.say");
} function callParent() {
parent.say();
parent.window.document.getElementById("button").value = "child调用结束";
}
</script>
</body> </html>
知识点:
window.parent 获取上一级的window对象
window.top 获取最顶级容器的window对象
window.self 返回自身window的引用
iframe.contentWindow, 获取iframe的window对象
iframe.contentDocument, 获取iframe的document对象
判断iframe是否加载完成有两种方法:
1. iframe上用onload事件
2. 用document.readyState=="complete"来判断
js在iframe子页面操作父页面元素代码: window.parent.document.getElementByIdx_x("父页面元素id");
在iframe中调用父页面中定义的方法和变量: window.parent.window.parentMethod(); window.parent.window.parentValue;
jquery在iframe子页面获取父页面元素代码如下: $("#objid",parent.document)
js在父页面获取iframe子页面元素代码如下: window.frames["iframe_ID"].document.getElementByIdx_x("子页面元素id");
父页面操作iframe子页面的方法和变量 window.frames["iframe_ID"].window.childMethod(); window.frames["iframe_ID"].window.childValue;
jquery在父页面获取iframe子页面的元素 $("#objid",document.frames('iframename').document)
window.frames && iframe 跨页面通信的更多相关文章
- [转]html5: postMessage解决跨域和跨页面通信的问题
[转]html5: postMessage解决跨域和跨页面通信的问题 平时做web开发的时候关于消息传递,除了客户端与服务器传值,还有几个经常会遇到的问题: 多窗口之间消息传递(newWin = wi ...
- iframe跨域通信实战
"长时间不写文章,开头的方式总是那么出奇的相似",最近很忙,好久没写博客了啊(是不是?). 更换工作已经有三个月有余,这段三个月把过去三年没加过的班都加了一次.收获挺多,发现的问题 ...
- 利用window.name+iframe跨域获取数据详解
详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...
- iframe 跨域问题解决方案 利用window.name+iframe跨域获取数据详解
详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...
- JavaScript 跨域:window.postMessage 实现跨域通信
JavaScript 跨域方式实现方式有很多,之前,一篇文章中提到了 JSONP 形式实现跨域.本文将介绍 HTML5 新增的 api 实现跨域:window.postMessage . 1 othe ...
- 利用HTML5的window.postMessage实现跨域通信
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp77 HTML5的window.postMessage简述 postM ...
- iframe父子页面通信
一.同域下父子页面的通信 1.父页面调用子iframe页面 (1)通过iframe的Id获取子页面的dom,然后通过内置属性contentWindow取得子窗口的window对象,此方法兼容各个浏览器 ...
- 对iframe跨域通信的封装
github源码:https://github.com/boycy815/topProxy 为了偷懒所以依赖了Kissy:http://docs.kissyui.com/ 用法举例:需求是在http: ...
- 使用window.postMessage实现跨域通信
JavaScript由于同源策略的限制,跨域通信一直是棘手的问题.当然解决方案也有很多: document.domain+iframe的设置,应用于主域相同而子域不同: 利用iframe和locati ...
随机推荐
- Python默认调用路径
记录个遇到的小问题,防止下次遇到忘记怎么解. 起因:pip安装扩展库时提示安装完成,但是在Python 终端下无法import 现象:终端直接运行python 时提示如下:(2.7.13)然而用/us ...
- linux 安装libevent
今天再ubuntu下安装libevent,下载源码 tar -xzvf libevent-1.4.15.tar.gz cd libevent-1.4.15 ./configure make make ...
- Day07 jdk5.0新特性&Junit&反射
day07总结 今日内容 MyEclipse安装与使用 JUnit使用 泛型 1.5新特性 自动装箱拆箱 增强for 静态导入 可变参数方法 枚举 反射 MyEclipse安装与使用(yes) 安装M ...
- Mirror--镜像相关错误
场景: 同一局域网下搭建了镜像的服务器上报以下错误日志: An error occurred in a Service Broker/Database Mirroring transport conn ...
- ftp文件上传和下载
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- HDU2588:GCD(欧拉函数的应用)
题目链接:传送门 题目需求:Given integers N and M, how many integer X satisfies 1<=X<=N and (X,N)>=M.(2& ...
- Mybatis入门和简单Demo
一.Mybatis的诞生 回顾下传统的数据库开发,JDBC和Hibernate是使用最普遍的技术,但这两种ORM框架都存在一定的局限性: JDBC:最原生的技术,简单易学,执行速度快,效率高,适合大数 ...
- TabControl delphi
1.TTabControl 组件的典型用法TTabControl 组件使用起来,根本不会使程序简单化,所以不提倡使用此组件,可以用TPageControl组件代替.与多页组件不同的是,虽然Tab 组件 ...
- #C++初学记录(阶乘#递归)
练习题目三 用递归进行阶乘 运行代码 #include<iostream> using namespace std; int f(int n); int n; int main() { c ...
- OAuth 白话简明教程 5.其他模式
转自:http://www.cftea.com/c/2016/11/6706.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...