想不出概括性的标题,这里就称展开问题的描述:
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>'); }
相关推荐
3. **iframe跨域问题**:当iframe加载的页面与包含它的页面不在同一个域时,就会出现跨域问题,导致无法直接通过JavaScript进行通信,如获取iframe内的内容、设置iframe的属性等。 **二、iframe跨域的解决方案** 1...
然而,由于浏览器的同源策略限制,当`iframe`加载的页面与包含它的页面不在同一个域名下时,就会遇到跨域问题。这篇博客将深入探讨如何解决`iframe`的跨域问题。 首先,理解同源策略是至关重要的。同源策略是浏览器...
在实际应用中,根据项目需求和浏览器兼容性,可以选择合适的方法实现iframe跨域调用父窗口的JavaScript方法。同时,注意安全问题,避免恶意代码通过跨域通信窃取敏感信息。 以上就是关于iframe跨域调用父页面js方法...
在Web开发中,"父窗口调用iframe子窗口方法"是一个常见的交互场景,尤其是在构建复杂的单页面应用或者需要跨窗口通信时。这篇文章将详细讲解如何实现这个功能,并提供相关的源码示例。 首先,理解基本概念。`iframe...
### iframe跨域通信解决方法 在现代Web开发中,跨域问题经常出现并困扰着开发者。尤其是在使用`iframe`嵌入不同源的内容时,主页面往往无法直接与`iframe`内的内容进行交互,这就需要一种解决方案来实现跨文档消息...
然而,当涉及到跨域时,`iframe` 遇到的问题之一就是无法正常访问父页面或被嵌入页面的`session`。这是因为浏览器的同源策略(Same-Origin Policy)限制了不同源之间的交互,包括`session`和`cookie`。 同源策略是...
标题和描述所提及的是一个关于如何解决layer弹窗在跨域环境下的问题,主要涉及到iframe、跨域以及layer的使用技巧。下面我们将详细探讨这个问题及其解决方案。 首先,我们了解下**iframe**。iframe(Inline Frame)...
2> 父窗口与子窗口传递值的方式也有所不同,在子窗口中操作父窗口也语法也不同,分别为var parentObjs = window.dialogArguments;opener.parentObj.elementObj.arrtr = 'str'; 3> IE与FireFox对两个弹出窗口在...
"解决JS跨域访问IFrame的解决方案"这一主题关注的就是如何克服这个限制,使得在JSP页面中嵌入的跨域IFrame能够正常通信。下面我们将详细探讨这个问题以及可能的解决方案。 首先,理解同源策略是关键。同源策略是...
当`iframe`尝试加载的页面与包含它的页面不在同一域名下时,就会遇到跨域问题。在处理`iframe`跨域时,主要涉及以下两种方法: 1. **CORS(Cross-Origin Resource Sharing)**:这是一种现代浏览器支持的跨域资源...
浏览器的同源策略(Same-Origin Policy)是为保障用户安全而设定的一种机制,它规定了只有相同协议、主机名和端口的网页才能相互交互,不同源的页面则无法直接进行DOM操作或读取对方的资源。然而,有时我们需要在不...
以前在面试的时候经常遇到问关于跨域的事儿,所以自己对跨域有一定的概念性了解,知道什么是跨域以及解决跨域的方法,但是具体实际从来没有操作过,直到最近在公司项目中,遇到了一个需要使iframe跨域进行POST提交的...
然而,`iframe`在处理跨域内容时,会受到同源策略的限制,导致一些功能无法正常使用,比如获取iframe内的DOM元素或设置其高度。本文将详细讲解如何解决`iframe`跨域问题以及实现自动适应高度的功能。 1. **同源策略...
在JavaScript编程中,父窗口与子窗口之间的通信是一种常见的需求,特别是在构建多窗口应用程序或弹出窗口时。本文将深入探讨如何在JavaScript中实现父窗口与子窗口之间的数据传递。 首先,我们需要理解“父窗口”和...
2. **子窗口操作父窗口的大小**: - **最大化**:通过设置窗口的位置和大小,例如`win.moveTo(-4,-4);win.resizeTo(screen.availWidth+8,screen.availHeight+8);`。 - **最小化**:将窗口大小设置为0,例如`win....
不过,当iframe和父页面属于同一域时,可以通过JavaScript或jQuery来操作父页面中的元素和方法。本文将详细介绍如何使用jQuery来查找和操作iframe父页面中的元素和方法。 首先,需要明确iframe元素可以被视为一个...
在Web开发中,"iframe跨域访问"是一个重要的概念,涉及到浏览器的安全策略和网页的嵌入技术。本文将深入探讨这个主题,以便更好地理解和应用。 首先,我们需要了解什么是iframe。Iframe,全称Inline Frame,是HTML...
本教程将深入探讨如何在子窗口通过JS操作父窗口中的元素,涉及到的关键技术包括JavaScript、HTML和DOM(Document Object Model)。 1. **JavaScript基础知识**: - JavaScript是一种解释型的、轻量级的编程语言,...
iframe跨域问题:Uncaught DOMException Blocked a frame with origin解决方法