`
ningxiaotao
  • 浏览: 43278 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

IE下Iframe的 document.domain的怪异问题

阅读更多

      在ie下如果两个 子站点的iframe页面之间需要交互,就必须在两个页面中都配置document.domain属性,比如页面A是http://xxx.aaa.com/a.html ,页面B是http://yyy.aaa.com/b.html 这时候两个页面中都写上document.domain=”aaa.com”,这样两个页面就可以交互了。

     上面的情况只适用于嵌入的页面是事先已经已<iframe src=”xxxxx”></iframe>的形式在页面中写好了,如果要在页面中动态创建一个iframe标签,上面的方法就不适用 了,这个问题经常会出现在富文本编辑器的代码中。最近这个问题可是困扰了我很长时间,今天总算解决了,其实问题就出在document.domain生效 的时机,做法就是在被调用的iframe页面中设置一个脚本变量,然后在父页面中不停地去尝试获取这个值,什么时候获得到了,就停下来执行自己的业务逻 辑。事先声明一下这个做法是参考了国外的一篇博客文章。

场景如下:

    要在页面A(http://xxx.aaa.com/a.html )中动态创建一个 iframe,iframe的src指向页面B(http://yyy.aaa.com/b.html ), 然后在页面A中获取或更改页面B中的内容。

代码如下:

 

页面A:

<html>
<head>
<title>http://xxx.aaa.com/a.html</title>
</head>
<body>
    <script type="text/javascript">
    document.domain = 'aaa.com';
    var iframe = document.createElement("iframe");
    iframe.src = 'http://yyy.aaa.com/b.html';
    document.body.appendChild(iframe);
  
   var timer = setInterval(function(){
           if(iframe.contentWindow.canAccess){
                 clearInterval(timer);
                 //iframe.contentWindow.document.body.innerHTML = '这是新设置的页面内容';
                alert('iframe的页面内容是:' + iframe.contentWindow.document.body.innerHTML);
            }
    }, 100);
  </script>
</body>
</html>
 

页面B:

 

<html>
<head>
<title>http://yyy.aaa.com/b.html</title>
<script type="text/javascript">
    document.domain = 'aaa.com';
    var canAccess = true;
  </script>
</head>
<body>
    这是页面的原始内容
</body>
</html>
 
分享到:
评论

相关推荐

    js设置document.domain实现跨域的注意点分析

    在这种情况下,JavaScript提供了一种方法,即通过设置`document.domain`属性来实现跨域操作。本文将详细介绍使用`document.domain`实现跨域的注意点。 #### document.domain属性的作用 `document.domain`是一个可...

    Web前端黑客技术揭秘(Web2Hack.org)_(i)7.6.5 跨子域:document.domain技巧1

    在同一个主域名下,不同的子域名可以通过设置`document.domain`为相同值来实现跨子域的JavaScript通信。例如,`www.foo.com`和`app.foo.com`可以将各自的`document.domain`设置为`foo.com`,从而允许它们之间共享...

    document.frames在非IE浏览器中的解决办法

    frame.document.body.innerHTML = "This is the new content."; } ``` - **child.html**: ```html &lt;!DOCTYPE html&gt; &lt;title&gt;Child Page Initial Content ``` 在这个例子中,当点击...

    PHP ajax跨子域的解决方案之document.domain+iframe实例分析

    总的来说,`document.domain`配合`iframe`提供了一种解决PHP AJAX跨子域问题的有效途径,使得同一主域下的不同子域能够相互通信。然而,这种方法也存在局限性,比如不支持所有浏览器,以及无法跨完全不同的域。因此...

    IE中document.createElement的iframe无法设置属性name的解决方法

    iframe.name = 'ifr'; //iframe.setAttribute('name', 'ifr'); //这样也不行 上面两种方式都无法设置。后来找到原来也可以这样创建 JavaScript代码 var iframe = document.createElement(‘&lt;iframe name

    通过伪协议解决父页面与iframe页面通信的问题

    为解决这个问题,可以在设置`iframe.src`前临时将`base`标签的`target`属性设置为`_self`,在内容写入完毕后再恢复为`_blank`。 尽管这种方法可以解决特定场景下的通信问题,但它也有潜在的风险。伪协议可以被滥用...

    Laya和iframe通信.zip

    例如,可以使用`Laya.Browser.document.getElementById`方法获取iframe的引用,然后调用iframe对象的`contentWindow`属性来访问其内部的window对象,从而执行各种操作。 非`addEventListener`监听通信可能指的是...

    iframe高度自适应,多浏览器兼容

    2. **IE8**:虽然支持`contentWindow`和`contentDocument`,但没有`MutationObserver`,所以需要在`window.onload`或`iframe.onload`事件中处理高度自适应。 3. **Firefox**:Firefox通常能较好地处理`iframe`,但...

    jQuery获取iframe的document对象的方法

    这里,`#myframe`是`iframe`的ID,`prop('contentWindow')`返回的是`iframe`的窗口对象,而`window`对象在JavaScript中包含了`document`属性,所以通过`.document`可以获取到`iframe`内部的`document`对象。...

    iframe读取document出现拒绝访问

    iframe.document出现拒绝访问。 threw an exception of type 'System.UnauthorizedAccessException' dynamic {System.UnauthorizedAccessException}

    iframe根据页面内容自适应高度和宽度

    this.style.height = this.contentWindow.document.body.scrollHeight + 'px'; this.style.width = this.contentWindow.document.body.scrollWidth + 'px'; }); ``` 这里,`myIframe`是`iframe`的ID,`...

    javascript 获取iframe里页面中元素值的方法

    IE方法:document.frames[‘myFrame’].document.getElementById(‘test’).value; 火狐方法:document.getElementById(‘myFrame’).contentWindow.document.getElementById(‘test’).value; IE、火狐方法: 代码...

    ajax iframe上传.

    doc = iframe.contentWindow.document; } return doc ? doc.body.innerHTML : ''; } ``` 通过以上步骤,我们就实现了AJAX与iframe结合的文件上传功能。这种方式可以在不刷新页面的情况下完成文件上传,并且能够...

    iframe拖动功能..........

    iframe.addEventListener('mousedown', function(event) { initialX = event.clientX - iframe.offsetLeft; initialY = event.clientY - iframe.offsetTop; document.addEventListener('mousemove', drag); });...

    javascript经典特效---滚动的iframe页面.rar

    iframe.contentWindow.document.body.scrollTop += scrollSpeed; }, 100); // 每100毫秒滚动一次 ``` 4. 添加滚动事件监听,以处理用户交互: ```javascript iframe.contentWindow.addEventListener('scroll', ...

    js下判断 iframe 是否加载完成的完美方法.docx

    iframe.onload = function(){ alert("Local iframe is now loaded."); }; document.body.appendChild(iframe); ``` 在上面的代码中,我们首先创建了一个 iframe 元素,然后将其 src 属性设置为要加载的 URL。接着...

    跨域解决方案

    2. document.domain + iframe 跨域:此方案仅限主域相同,子域不同的跨域请求情况。我们可以通过强制设置 document.domain 为基础主域,从而实现同域。 3. location.hash + iframe 跨域 4. window.name + iframe ...

Global site tag (gtag.js) - Google Analytics