2010-07-05 141 views
2

是否可以使用document.createElement("iframe");创建Iframe,然后在iframe的窗口对象(如命名空间)中设置变量?在Iframe中设置变量

我试图做这样的事情:

var Namespace = {}; 
var iframe = document.createElement("iframe"); 
iframe.src = "page.html"; 
document.body.appendChild(iframe); 
var iwin = iframe.contentWindow || iframe.contentDocument.defaultView; 
iwin.Namespace = Namespace; 

但在page.html中我尝试登录Namespace,它抛出一个未定义的错误。

回答

4

同源策略可能会阻止您执行此操作。如果两个页面都使用file:// uri方案,那么这在一些浏览器中也会发生。

如果iframe和外部窗口将使用相同的域,则一旦代码位于服务器上,此问题应该消失。尝试从服务它本地主机使用Apache检查,或与谷歌浏览与按这个帖子禁止的同源策略测试:

Disable same origin policy in Chrome

在另一方面,如果IFRAME必须在不同域,或者需要使用file:// uri方案,则需要使用某种解决方法。

将数据传递到另一个域的iframe的一种方法是通过iframe元素的src属性中的片段标识符,该属性将在iframe窗口的“位置”对象的“散列”属性中可见;例如:

外部页面:

<!doctype html> 
<html><head></head><body> 
<script> 
    var Namespace = {foo:1, bar:2}; 
    var iframe = document.createElement("iframe"); 
    iframe.src = "frame.html#" + JSON.stringify(Namespace); 
    document.body.appendChild(iframe); 
</script> 
</body></html> 

内页 “frame.html”:

<!doctype html> 
<html><head></head><body> 
<a href="#" onclick="alert(location.hash.substring(1))">click me</a> 
</body></html> 
+0

我的英雄;非常感谢你。不知道应用于文件的相同原点:// – Louis 2010-07-05 08:18:15

0

document.appendChild(iframe);

我很确定你需要添加你创建的节点到DOM。

+0

哎呀,做编辑。虽然没有修复它。 – Louis 2010-07-05 04:54:26