在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>
分享到:
相关推荐
在这种情况下,JavaScript提供了一种方法,即通过设置`document.domain`属性来实现跨域操作。本文将详细介绍使用`document.domain`实现跨域的注意点。 #### document.domain属性的作用 `document.domain`是一个可...
在同一个主域名下,不同的子域名可以通过设置`document.domain`为相同值来实现跨子域的JavaScript通信。例如,`www.foo.com`和`app.foo.com`可以将各自的`document.domain`设置为`foo.com`,从而允许它们之间共享...
frame.document.body.innerHTML = "This is the new content."; } ``` - **child.html**: ```html <!DOCTYPE html> <title>Child Page Initial Content ``` 在这个例子中,当点击...
总的来说,`document.domain`配合`iframe`提供了一种解决PHP AJAX跨子域问题的有效途径,使得同一主域下的不同子域能够相互通信。然而,这种方法也存在局限性,比如不支持所有浏览器,以及无法跨完全不同的域。因此...
iframe.name = 'ifr'; //iframe.setAttribute('name', 'ifr'); //这样也不行 上面两种方式都无法设置。后来找到原来也可以这样创建 JavaScript代码 var iframe = document.createElement(‘<iframe name
为解决这个问题,可以在设置`iframe.src`前临时将`base`标签的`target`属性设置为`_self`,在内容写入完毕后再恢复为`_blank`。 尽管这种方法可以解决特定场景下的通信问题,但它也有潜在的风险。伪协议可以被滥用...
例如,可以使用`Laya.Browser.document.getElementById`方法获取iframe的引用,然后调用iframe对象的`contentWindow`属性来访问其内部的window对象,从而执行各种操作。 非`addEventListener`监听通信可能指的是...
2. **IE8**:虽然支持`contentWindow`和`contentDocument`,但没有`MutationObserver`,所以需要在`window.onload`或`iframe.onload`事件中处理高度自适应。 3. **Firefox**:Firefox通常能较好地处理`iframe`,但...
这里,`#myframe`是`iframe`的ID,`prop('contentWindow')`返回的是`iframe`的窗口对象,而`window`对象在JavaScript中包含了`document`属性,所以通过`.document`可以获取到`iframe`内部的`document`对象。...
iframe.document出现拒绝访问。 threw an exception of type 'System.UnauthorizedAccessException' dynamic {System.UnauthorizedAccessException}
this.style.height = this.contentWindow.document.body.scrollHeight + 'px'; this.style.width = this.contentWindow.document.body.scrollWidth + 'px'; }); ``` 这里,`myIframe`是`iframe`的ID,`...
IE方法:document.frames[‘myFrame’].document.getElementById(‘test’).value; 火狐方法:document.getElementById(‘myFrame’).contentWindow.document.getElementById(‘test’).value; IE、火狐方法: 代码...
doc = iframe.contentWindow.document; } return doc ? doc.body.innerHTML : ''; } ``` 通过以上步骤,我们就实现了AJAX与iframe结合的文件上传功能。这种方式可以在不刷新页面的情况下完成文件上传,并且能够...
iframe.addEventListener('mousedown', function(event) { initialX = event.clientX - iframe.offsetLeft; initialY = event.clientY - iframe.offsetTop; document.addEventListener('mousemove', drag); });...
iframe.contentWindow.document.body.scrollTop += scrollSpeed; }, 100); // 每100毫秒滚动一次 ``` 4. 添加滚动事件监听,以处理用户交互: ```javascript iframe.contentWindow.addEventListener('scroll', ...
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 ...