javascript

位置:IT落伍者 >> javascript >> 浏览文章

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


发布日期:2018年03月08日
 
js操作iframe兼容各种主流浏览器示例代码
遇到了操作iframe的相关问题其实就是在操作iframe内部某个窗体时调用父窗体的一个函数下面与大家分享下操作iframe兼容各种浏览器的方法

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

复制代码 代码如下:
<html xmlns="
<head><title>
</title>
<script src="jqueryminjs" 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="" src=childhtml style="width:%;height:%;" ></iframe>
</body>
</html>


子页面childhtml的代码如下

复制代码 代码如下:
<html xmlns="
<head><title>
</title>
<script src="jqueryminjs" type="text/javascript"></script>
<script type="text/javascript">
$(document)ready(function () {
$("#btnTest")click(function (e) {
var t=windowparent;
tParentFunction();
});
})
</script></head>
<body>
<input type="button" id="btnTest" class="button" value="应该获取的值" />rrr
</body>
</html>


网络上流行的方法 var t=windowparent; tParentFunction();在IE中能调用可是在谷歌浏览器中总是提示如下错误
Blocked a frame with origin "null" from accessing a frame with origin "null" Protocols domains and ports must match
网上找了很长时间都没法发现方法有的也是很早以前的版本基本上没用了而且人云亦云基本上没有测试过于是自己摸索后来才发现谷歌浏览器其实那种方法其实也可以只是很奇怪必须发布后才可以在文件系统中调用就会出现上边的错误
其实还有一种html的方法postMessage于是就根据着进行了改写最终代码如下
父页面parenthtml的代码如下

复制代码 代码如下:
<html xmlns="
<head><title>
</title>
<script src="jqueryminjs" type="text/javascript"></script>
<script type="text/javascript">
thisParentFunction= function() {//和注释掉的方法是一样的也就是说加不加this都是一样的因为此处的this就是windows
alert(ParentFunction);
}
// function ParentFunction() {
// alert(ParentFunction);
// }
function receiveMessage(e) {
var data = edata;
if(data=="ParentFunction")
{
ParentFunction() ;
}
}
if (typeof windowaddEventListener != undefined) {//使用html 的postMessage必须处理的
windowaddEventListener(message receiveMessage false);
} else if (typeof windowattachEvent != undefined) {
windowattachEvent(onmessage receiveMessage);
}
</script></head>
<body>
<input type="button" id="btnCancel" class="button" value="测试" />
<iframe id="FRMdetail" name="FRMdetail" frameborder="" src=childhtml style="width:%;height:%;" ></iframe>
</body>
</html>


子页面childhtml的代码如下

复制代码 代码如下:
<html xmlns="
<head><title>
</title>
<script src="jqueryminjs" type="text/javascript"></script>
<script type="text/javascript">
$(document)ready(function () {
$("#btnTest")click(function (e) {
var t=windowparent;
if(!tParentFunction)//在不支持时使用html 的postMessage方法
{
tpostMessage("ParentFunction" *);
}
else
{
tParentFunction();
}
});
})
</script></head>
<body>
<input type="button" id="btnTest" class="button" value="应该获取的值" />rrr
</body>
</html>


经过改写后在文件系统中虽然也会出现那个错误但需要调用的方法确实调用了目的确实达到了不影响使用了

上一篇:jQuery.extend()的实现方式详解及实例

下一篇:JavaScript 判断浏览器是否支持SVG方法