想不出概括性的标题,这里就称展开问题的描述:
a.com下有
a.html
代码片段
<script src="a.js"></script> ... <div id="divid"> <span id="spanid" onclick="a();">a</span> </div> ...
a.js
a.js有方法
function a(){} function b(){}
b.com下有
b.html
代码片段
<script src="b.js"></script> ... <iframe id="subiframe" name="subiframe" src="a.com/a.html"></iframe> ...
b.js
$jq(document).ready(function(){ example(); }); function example(){ $jq(window.frames["subiframe"].document).find("#spanid").removeAttr("onclick").unbind().attr("onclick","javascript:b();"); }
以上代码实现了在b.com下b.js为a.com下的元素spanid重新绑定事件,原来绑定a现在绑定成b。
这样可行吗?
最终的答案是:不行!因为万恶的ie6、ie7不认attr这样的事件绑定写法。
关于jquery事件绑定有bind、live、delegate,三者的区别得使用可参考此文http://www.jb51.net/article/27309.htm
把上面的attr改成bind、live、delegate的写法
$jq(window.frames["subiframe"].document).find("#spanid").removeAttr("onclick").unbind().bind("click",function(){b();});
更加不行了,改成这样的写法无论什么浏览器都不认得b()这个方法了。
结论:
javascript在iframe跨域时父窗口操作子窗口并绑定子元素到子域下的function没有可行的办法!但如果不考虑万恶的ie6、ie7可以勉强使用attr这种方法。
解决办法:
虽然跨域对子元素绑定子方法绕不过ie6、ie7,但是对于iframe下的子元素增删改还是十分方便的,因此我们可以想办法重写整个spanid这个元素,重写example
function example(){ $jq(window.frames["subiframe"].document).find("#spanid").removeAttr("onclick").unbind(); $jq(window.frames["subiframe"].document).find("#divid").html('<span id="spanid" onclick="b();">a</span>'); }
相关推荐
iframe 跨域访问session问题解决方法
该文档介绍了vue和普通web页面中iframe实现跨域的解决方案,解决了主页面中无法调用iframe方法的问题
框架完美解决了iframe之间的跨域通讯。底层技术采用window.name转换代理实现
2> 父窗口与子窗口传递值的方式也有所不同,在子窗口中操作父窗口也语法也不同,分别为var parentObjs = window.dialogArguments;opener.parentObj.elementObj.arrtr = 'str'; 3> IE与FireFox对两个弹出窗口在...
以前在面试的时候经常遇到问关于跨域的事儿,所以自己对跨域有一定的概念性了解,知道什么是跨域以及解决跨域的方法,但是具体实际从来没有操作过,直到最近在公司项目中,遇到了一个需要使iframe跨域进行POST提交的...
NULL 博文链接:https://hqlly.iteye.com/blog/1662337
通过HTTPClient界面在JSP中嵌入iframe子界面跨域时,无法获取跨域界面的属性值的问题
实现内嵌的iframe跨域调用父页面js方法
这是关于iframe使用过程中出现的问题整理的解决方法,关于使用iframe不用单独写接口打通数据,直接把数据通过ifarme嵌套方法传递过去,使用简单方便。
iframe跨域问题:Uncaught DOMException Blocked a frame with origin解决方法
在web开发中,跨域问题是经常遇到的,但是由于浏览器同源策略的限制,不同域之间属性和操作是无法直接交互的。本次讨论iframe和父页面的消息通信。
iframe 跨域 自动适应高度;iframe 跨域 自动适应高度;
layer弹窗:top.layer弹窗到父页面跨域,通过postMessage方法将子页面的配置对象发送到父页面中,父页面再通过子页面的配置对象打开弹窗,对象内不能存在事件。
iframe跨域访问示例
finereport是一款常用的表格制作软件/报表开发工具,本资源讲述在表格制作软件中实现iframe跨域单点登陆的具体实现方法,包括具体的操作步骤和实现代码等
iframe 与主框架相互访问例子,包含同域访问,跨域访问例子。
Sys.UI.DomElement.getLocation=function(a){if(a.self||a.nodeType===9)return new Sys.UI.Point(0,0);var b=a.getBoundingClientRect();if(!b)return new Sys.UI.Point(0,0);var c=a.document.documentElement,d=b...
完美解决跨域iframe的高度自适应,完美解决跨子域iframe的高度自适应,嵌入几个页面解决跨域iframe的高度自适应。。。
【ASP.NET编程知识】iframe跨域与session失效问题的解决办法.docx
iframe跨域,里面包含四个文件,具体使用方式参考代码,