有时候,在web页面中使用iframe,可以解决一些实际问题,比如跨域访问等……这篇文章的关键不是iframe适用于哪些场景?而是iframe间如何进行互通?所谓互通是指:

情况1:在任何一个页面中调用其它页面的方法或数据(比如:在frameb.html中调用index.html中的sayHello)

情况2:在任何一个页面中访问其它页面的元素(比如:在frameb.html中访问framea.html中的文本框)

针对情况1:

设有一个index.html页面,包含了两个iframe,id分别是framea和frameb,同时对应的url是framea.html和frameb.html。

index.html有自己的sayHello()方法,及run_framea()、run_frameb()两个方法,分别调用framea.html和frameb.html中的sayHello()方法。

 <h1>我是主(父)窗口</h1>
<button onclick="run_framea()">调用A窗口中的数据</button>
<button onclick="run_frameb()">调用B窗口中的数据</button> <iframe id="framea" src="framea.html"></iframe>
<iframe id="frameb" src="frameb.html"></iframe>
<script>
function sayHello() {
alert('Hello, 我是主窗口');
}
function run_framea() {
//window.frames['framea'].sayHello();
window.frames['framea'].contentWindow.sayHello();
}
function run_frameb() {
window.frames['frameb'].contentWindow.sayHello();
}
</script>

调用的时候要注意两点:

1)文档要加载完毕(包括iframe中的文档)。建议这类调用,要用在window.onload之后再执行相应的操作。

2)访问iframe中的数据源的方法有如下几种:

 window[i].method(); //i是iframe的索引号

 window.frames[i].method(); //i是iframe的索引号

 window.frames['id'].contentWindow.method(); //id是iframe的DOM id

 //window.frames['id']方式访问得到是的iframe本身
//window.frame[0]方式访问得到是iframe里文档的window
//window.frames['id'].contentWindow === window.frame[0]

下面是framea.html的原代码:也有他自己的sayHello()方法,和调用run_parent()、run_frameb()方法

<h1>我是窗口A</h1>
<button onclick="run_parent()">调用父窗口中的数据</button>
<button onclick="run_frameb()">调用B窗口中的数据</button> <script>
function sayHello() {
alert('Hello, 我是窗口A');
}
function run_parent() {
parent.sayHello();
}
function run_frameb() {
parent.frames['frameb'].contentWindow.sayHello();
}
</script>

注:parent是某个iframe的包含页面的window

针对情况2:

通过上面的例子可以得知,iframe[0]为一个文档的window对象,那么iframe[0].document则是对应的document对象。

关于引用iframe的一点小说明的更多相关文章

  1. 关于win8开发的一点小总结

    我今天做画面的时候,发现了一点小问题. 我在xmal文件里面加了一个CheckBox控件,设置IsChecked属性为True,并添加了Checked事件.Checked事件里面有对另外一个TextB ...

  2. 关于PHP魔术方法__call的一点小发现

    好久没有上博客园写文章了,今晚终于有点空了,就来写一下昨天的一点小发现. 我自己所知,C++,Java的面向对象都有多态的特点,而PHP没有,但PHP可以通过继承链方法的重写来实现多态的属性.而魔术方 ...

  3. net core体系-web应用程序-4net core2.0大白话带你入门-8asp.net core 内置DI容器(DependencyInjection,控制翻转)的一点小理解

    asp.net core 内置DI容器的一点小理解   DI容器本质上是一个工厂,负责提供向它请求的类型的实例. .net core内置了一个轻量级的DI容器,方便开发人员面向接口编程和依赖倒置(IO ...

  4. C与C++在形參的一点小差别

    先看一下以下的代码: int fun(a,b) int a; int b; { return 10; } void main(int argc, char ** argv) { fun(10); re ...

  5. BUI Webapp用于项目中的一点小心得

    接触BUI也有一段时间,也用在了移动端的项目开发中,总的来说,该框架用起来也挺灵活的,控件可以自由定制,前提是自己能认真地学习该框架的api,因为api里面说的东西比较详细,如果没有仔细看的,可能有些 ...

  6. Javascript中window.opener的一点小总结

    以前一直认为window.opener只有在window.open方法打开下的窗口才可以访问,没想到即使是a链接打开的页面的照样可以访问.window.opener指向父窗口,也就是来源窗口.可以利用 ...

  7. 深入剖析Nginx一点小笔记

    前几天在图书馆看书,恰好看到这本<深入剖析nginx>,花了快一周的时间看完了这本书,写点笔记心得便于以后复习. 以前对nginx的认识就只是停留在一个反向代理服务器上.百度了一下ngin ...

  8. Java8——Stream流式操作的一点小总结

    我发现,自从我学了Stream流式操作之后,工作中使用到的频率还是挺高的,因为stream配合着lambda表达式或者双冒号(::)使用真的是优雅到了极致!今天就简单分(搬)享(运)一下我对strea ...

  9. 关于C#中readonly的一点小研究

    可能园子里有不少文章已经说明了这个问题了,但是我在这里写这篇博客只是写写自己的一些体会,也权当是整理归纳,高手莫见笑. ===============正文分割线================== 现 ...

随机推荐

  1. CodeIgniter学习笔记五:分页,文件上传,session,验证码

    一.分页 示例代码: //装载类文件 $this -> load -> library('pagination'); $controller = $this->router-> ...

  2. leetcode 【 Remove Nth Node From End of List 】 python 实现

    题目: Given a linked list, remove the nth node from the end of list and return its head. For example, ...

  3. maven的一些使用配置!

    1.国外库太慢,更换为国内镜像库在你的maven安装目录下找到conf目录下的setting.xml修改:<mirrors> <id>CN</id> <nam ...

  4. chrome flash插件改为自动运行

    1.情景展示 国内网页视频播放大部分用的都是flash插件,每次都要将默认改为允许,才能正常播放         能不能让flash插件在所有的网站上都能自动运行呢? 2.解决方案 第一步:打开fla ...

  5. node.js和npm的安装

    1.进入node.js官方网站,下载和系统对应的版本,我下载的是这个最新版本:node-v8.2.1-x64.msi https://nodejs.org/en/download/ 2.windows ...

  6. COMMIT和ROLLBACK的用法

    从功能上划分,SQL语言可以分为DDL,DML和DCL三大类. 1.DDL(Data Definition Language)  数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 : C ...

  7. user-select & css

    user-select & css https://developer.mozilla.org/en-US/docs/Web/CSS/user-select https://css-trick ...

  8. VS2013下配置OpenCV 3.0.0 &&& VS2013下配置Opencv2.4.9

    最近做图像需要用到Matlab和OpenCV,一些东西真的是要深入的研究进去才会有所发现,但Matlab和C++都不是我擅长的语言,所以要很加油很加油才行啊!! 步入正题. 1.  环境:Win7 6 ...

  9. axis2实践(一)JAX-WS入门示例

    1. 实例说明 现在大多数的网站都有通知功能(例如,放假通知,网站维护通知等),本实例就是针对于通知,发布两个WebService服务 1)根据供应商编号,状态,发布日期查询通知信息 2)根据编号查询 ...

  10. POJ 3630 Phone List | Trie 树

    题目: 给定 n 个长度不超过 10 的数字串,问其中是否存在两个数字串 S, T ,使得 S 是 T 的前缀.多组数据,数据组数不超过 40. 题解: 前缀问题一般都用Trie树解决: 所以跑一个T ...