`
truemylife
  • 浏览: 230443 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

javascript在父窗口iframe跨域操作子元素无法绑定子域下的function的解决办法

阅读更多

想不出概括性的标题,这里就称展开问题的描述:

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>');
}

 

0
0
分享到:
评论

相关推荐

    完美解决iframe跨域问题

    3. **iframe跨域问题**:当iframe加载的页面与包含它的页面不在同一个域时,就会出现跨域问题,导致无法直接通过JavaScript进行通信,如获取iframe内的内容、设置iframe的属性等。 **二、iframe跨域的解决方案** 1...

    iframe 跨域解决方法

    然而,由于浏览器的同源策略限制,当`iframe`加载的页面与包含它的页面不在同一个域名下时,就会遇到跨域问题。这篇博客将深入探讨如何解决`iframe`的跨域问题。 首先,理解同源策略是至关重要的。同源策略是浏览器...

    iframe跨域调用父窗口js.zip

    在实际应用中,根据项目需求和浏览器兼容性,可以选择合适的方法实现iframe跨域调用父窗口的JavaScript方法。同时,注意安全问题,避免恶意代码通过跨域通信窃取敏感信息。 以上就是关于iframe跨域调用父页面js方法...

    父窗口调用iframe子窗口方法

    在Web开发中,"父窗口调用iframe子窗口方法"是一个常见的交互场景,尤其是在构建复杂的单页面应用或者需要跨窗口通信时。这篇文章将详细讲解如何实现这个功能,并提供相关的源码示例。 首先,理解基本概念。`iframe...

    iframe跨域通信解决方法

    ### iframe跨域通信解决方法 在现代Web开发中,跨域问题经常出现并困扰着开发者。尤其是在使用`iframe`嵌入不同源的内容时,主页面往往无法直接与`iframe`内的内容进行交互,这就需要一种解决方案来实现跨文档消息...

    iframe 跨域访问session

    然而,当涉及到跨域时,`iframe` 遇到的问题之一就是无法正常访问父页面或被嵌入页面的`session`。这是因为浏览器的同源策略(Same-Origin Policy)限制了不同源之间的交互,包括`session`和`cookie`。 同源策略是...

    showModalDialog open弹出子窗口操作parent、opener父窗口及跨域处理

    2&gt; 父窗口与子窗口传递值的方式也有所不同,在子窗口中操作父窗口也语法也不同,分别为var parentObjs = window.dialogArguments;opener.parentObj.elementObj.arrtr = 'str'; 3&gt; IE与FireFox对两个弹出窗口在...

    解决JS跨域访问IFrame的解决方案

    "解决JS跨域访问IFrame的解决方案"这一主题关注的就是如何克服这个限制,使得在JSP页面中嵌入的跨域IFrame能够正常通信。下面我们将详细探讨这个问题以及可能的解决方案。 首先,理解同源策略是关键。同源策略是...

    iframe跨域常用问题和iframe页面自适应

    当`iframe`尝试加载的页面与包含它的页面不在同一域名下时,就会遇到跨域问题。在处理`iframe`跨域时,主要涉及以下两种方法: 1. **CORS(Cross-Origin Resource Sharing)**:这是一种现代浏览器支持的跨域资源...

    layer弹窗:top.layer弹窗到父页面跨域解决办法

    标题和描述所提及的是一个关于如何解决layer弹窗在跨域环境下的问题,主要涉及到iframe、跨域以及layer的使用技巧。下面我们将详细探讨这个问题及其解决方案。 首先,我们了解下**iframe**。iframe(Inline Frame)...

    iframe跨域解决方案

    浏览器的同源策略(Same-Origin Policy)是为保障用户安全而设定的一种机制,它规定了只有相同协议、主机名和端口的网页才能相互交互,不同源的页面则无法直接进行DOM操作或读取对方的资源。然而,有时我们需要在不...

    关于iframe跨域POST提交的方法示例

    以前在面试的时候经常遇到问关于跨域的事儿,所以自己对跨域有一定的概念性了解,知道什么是跨域以及解决跨域的方法,但是具体实际从来没有操作过,直到最近在公司项目中,遇到了一个需要使iframe跨域进行POST提交的...

    iframe 跨域 自动适应高度

    然而,`iframe`在处理跨域内容时,会受到同源策略的限制,导致一些功能无法正常使用,比如获取iframe内的DOM元素或设置其高度。本文将详细讲解如何解决`iframe`跨域问题以及实现自动适应高度的功能。 1. **同源策略...

    javascript 父窗口、子窗口传值问题

    在JavaScript编程中,父窗口与子窗口之间的通信是一种常见的需求,特别是在构建多窗口应用程序或弹出窗口时。本文将深入探讨如何在JavaScript中实现父窗口与子窗口之间的数据传递。 首先,我们需要理解“父窗口”和...

    HTML中IFrame父窗口与子窗口相互操作

    2. **子窗口操作父窗口的大小**: - **最大化**:通过设置窗口的位置和大小,例如`win.moveTo(-4,-4);win.resizeTo(screen.availWidth+8,screen.availHeight+8);`。 - **最小化**:将窗口大小设置为0,例如`win....

    Jquery调用iframe父页面中的元素及方法

    不过,当iframe和父页面属于同一域时,可以通过JavaScript或jQuery来操作父页面中的元素和方法。本文将详细介绍如何使用jQuery来查找和操作iframe父页面中的元素和方法。 首先,需要明确iframe元素可以被视为一个...

    iframe跨域访问示例

    在Web开发中,"iframe跨域访问"是一个重要的概念,涉及到浏览器的安全策略和网页的嵌入技术。本文将深入探讨这个主题,以便更好地理解和应用。 首先,我们需要了解什么是iframe。Iframe,全称Inline Frame,是HTML...

    子窗口通过js操作父窗口中的元素

    本教程将深入探讨如何在子窗口通过JS操作父窗口中的元素,涉及到的关键技术包括JavaScript、HTML和DOM(Document Object Model)。 1. **JavaScript基础知识**: - JavaScript是一种解释型的、轻量级的编程语言,...

    iframe跨域问题

    iframe跨域问题:Uncaught DOMException Blocked a frame with origin解决方法

Global site tag (gtag.js) - Google Analytics