js操作iframe兼容各种主流浏览器示例代码


Posted in Javascript onJuly 22, 2013

在做项目时,遇到了操作iframe的相关问题。业务很简单,其实就是在操作iframe内部某个窗体时,调用父窗体的一个函数。于是就写了两个很简单的htm页面用来测试,使用网上流行的方法在谷歌浏览器中始终报错,不能通过。
父页面parent.html的代码如下

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><title> 
</title> 
<script src="jquery-1.10.1.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
function ParentFunction() { 
alert('ParentFunction'); 
} 
</script></head> 
<body> 
<input type="button" id="btnCancel" class="button" value="测试" /> 
<iframe id="FRMdetail" name="FRMdetail" frameborder="0" src='child.html' style="width:100%;height:100%;" ></iframe> 
</body> 
</html>

子页面child.html的代码如下
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><title> 
</title> 
<script src="jquery-1.10.1.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
$(document).ready(function () { 
$("#btnTest").click(function (e) { 
var t=window.parent; 
t.ParentFunction(); 
}); 
}) 
</script></head> 
<body> 
<input type="button" id="btnTest" class="button" value="应该获取的值" />rrr 
</body> 
</html>

网络上流行的方法 var t=window.parent; t.ParentFunction();在IE中能调用,可是在谷歌浏览器中总是提示如下错误,
Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match.
网上找了很长时间都没法发现方法,有的也是很早以前的版本,基本上没用了,而且人云亦云,基本上没有测试过。于是自己摸索,后来才发现,谷歌浏览器其实那种方法其实也可以,只是很奇怪,必须发布后才可以,在文件系统中调用,就会出现上边的错误。
其实还有一种html5的方法postMessage,于是就根据着进行了改写,最终代码如下:
父页面parent.html的代码如下
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><title> 
</title> 
<script src="jquery-1.10.1.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
this.ParentFunction= function() {//和注释掉的方法是一样的,也就是说加不加this都是一样的,因为此处的this就是windows 
alert('ParentFunction'); 
} 
// function ParentFunction() { 
// alert('ParentFunction'); 
// } 
function receiveMessage(e) { 
var data = e.data; 
if(data=="ParentFunction") 
{ 
ParentFunction() ; 
} 
} 
if (typeof window.addEventListener != 'undefined') {//使用html5 的postMessage必须处理的 
window.addEventListener('message', receiveMessage, false); 
} else if (typeof window.attachEvent != 'undefined') { 
window.attachEvent('onmessage', receiveMessage); 
} 
</script></head> 
<body> 
<input type="button" id="btnCancel" class="button" value="测试" /> 
<iframe id="FRMdetail" name="FRMdetail" frameborder="0" src='child.html' style="width:100%;height:100%;" ></iframe> 
</body> 
</html>

子页面child.html的代码如下
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><title> 
</title> 
<script src="jquery-1.10.1.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
$(document).ready(function () { 
$("#btnTest").click(function (e) { 
var t=window.parent; 
if(!t.ParentFunction)//在不支持时,使用html5 的postMessage方法 
{ 
t.postMessage("ParentFunction", '*'); 
} 
else 
{ 
t.ParentFunction(); 
} 
}); 
}) 
</script></head> 
<body> 
<input type="button" id="btnTest" class="button" value="应该获取的值" />rrr 
</body> 
</html>

经过改写后,在文件系统中虽然也会出现那个错误,但需要调用的方法确实调用了,目的确实达到了,不影响使用了。
Javascript 相关文章推荐
JsEasy简介 JsEasy是什么?与下载
Mar 07 Javascript
javascript 多种搜索引擎集成的页面实现代码
Jan 02 Javascript
IE8中使用javascript动态加载CSS的解决方法
Jun 17 Javascript
Linux下使用jq友好的打印JSON技巧分享
Nov 18 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
Oct 21 Javascript
JS实现重新加载当前页面或者父页面的几种方法
Nov 30 Javascript
js实现百度搜索提示框
Feb 05 Javascript
Vue2.x中的父组件传递数据至子组件的方法
May 01 Javascript
使用Vuex实现一个笔记应用的方法
Mar 13 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
Apr 23 jQuery
angular6 填坑之sdk的方法
Dec 27 Javascript
微信公众号平台接口开发 菜单管理的实现
Aug 14 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
Jul 22 #Javascript
JS判定是否原生方法
Jul 22 #Javascript
js图片延迟加载的实现方法及思路
Jul 22 #Javascript
js添加table的行和列 具体实现方法
Jul 22 #Javascript
JS中eval函数的使用示例
Jul 21 #Javascript
JS中prototype关键字的功能介绍及使用示例
Jul 21 #Javascript
原生JS实现表单checkbook获取已选择的值
Jul 21 #Javascript
You might like
php项目打包方法
2008/02/18 PHP
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
php开发工具有哪五款
2015/11/09 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
PHP连接MySQL数据库三种实现方法
2020/12/10 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
vue 2.0封装model组件的方法
2017/08/03 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
2017/12/26 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
javascript中this的用法实践分析
2019/07/29 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
Araks官网:纽约内衣品牌
2020/10/15 全球购物
大学生自荐信
2013/12/11 职场文书
高中生自我评语大全
2014/01/19 职场文书
环保倡议书怎么写
2014/05/16 职场文书
师德师风个人总结
2015/02/06 职场文书
父亲节活动总结
2015/02/12 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS