有时候,在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. 部署 CA 和 NPS 服务器证书

    TechNet 库 Windows Server Windows Server 2008 R2 und Windows Server 2008 按类别提供的 Windows Server 内容 按类别 ...

  2. NSThread那些事儿

    NSThread 哎呀,它面向对象,再去看看苹果提供的API,对比一下Pthreads,简单明了,人生仿佛又充满了阳光和希望,我们先来一看一下系统提供给我们的API自然就知道怎么用了,来来来,我给你注 ...

  3. 《算法》C++代码 前言

    现在大二正在上<数据结构>课,课内的书上代码实现很喜欢无脑用类.变量名字很长,而且常常实现太繁琐,并且代码有些无法运行,这些对于老手无所谓,但初学者看起来却会很不舒服.因此写点自己的代码, ...

  4. 转载——一步步学习js

    一步步学习javascript基础篇(0):开篇索引 阅读目录 索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习j ...

  5. selenium启动IE浏览器报错:selenium.common.exceptions.WebDriverException: Message: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode mu

    意思是浏览器的保护模式设置不一致所导致 解决方案-->修改IE设置 将所有区域的保护模式勾选去掉即可

  6. 使用python 3导入MySQLdb 报No module named 'MySQLdb'异常错误

    MySQLdb只支持Python2.*,还不支持3.* 可以用PyMySQL代替安装PyMySQL后,在使用模块时使用import pymysql as MySQLdb 后续使用方式与MySQLdb  ...

  7. docker部署思路

    1.docker安装2.拉取centos镜像或者Ubuntu镜像 看你用哪个3.使用镜像,run出来一个容器A4.进入容器A,安装uwsgi,把Django部署在下面5.在启动脚本中配置开机自启动脚本 ...

  8. sublime3 Package Control和 中文安装

    sublime3中文版需要使用PackageControl,所以首先需要安装PackageControl 一.PackageControl安装: 1.点击Preferences > Browse ...

  9. CI框架入门

    本人最近在学习CI框架,网上找到一些个人觉得入门比较好的资料,记录一下: 兄弟连的CI框架入门系类: [军哥谈CI框架]之入门教程之第一讲:codeigniter的介绍和安装配置:http://bbs ...

  10. 201621123033 《Java程序设计》第2周学习总结

    1. 本周学习总结 ·学习了String类的特点,以及其与字符数组的关系等等. ·常量池的相关概念. ·包装类的特点. 2. 书面作业 1. String-使用Eclipse关联jdk源代码 1.1 ...