是否可以从父框架(同一document.domain)更改iframe的DOM?

时间:2011-08-25 23:13:45

标签: javascript jquery iframe cross-domain xmlhttprequest

我想要一种简单且轻量级的方法来向我的api地址( api.example.com )发出跨域请求,这是我主域的子域(示例。 COM )。

我已经阅读了很多关于处理XDR的技术和黑客以及它们与每个使用过的浏览器的不兼容性,但XDR对我来说仍然非常复杂。我不需要像easyXDM这样完整/复杂的解决方案,我已经实现并完美地工作了。

所以,我决定'启用CORS'解决了现代Webkit和Gecko浏览器的问题。但是一如既往,还有IE(在这种情况下也是Opera),它与CORS不兼容。

由于我想继续使用jQuery AJAX方法,我搜索了一个允许XDR使用jQuery方法的解决方案。然后,我实现了benvinegar的一个非常好的解决方案,它取代了jQuery.ajax()方法,因此取代了所有依赖方法:https://gist.github.com/859940。他的脚本基于document.domain / iframe技巧。

在调用Ben提出的函数之前,我使用jQuery.support.cors(使用jQuery 1.6.2)测试了CORS支持。一切都很好,工作得很好。

我对上述链接脚本唯一不满意的是我需要从 api.example.com 加载jQuery库,我不希望这样。我在一个文件中制作了一组缩小的javascript库/插件/脚本,这些文件由 example.com 使用;这给了我2个选项(在 api.example.com 中使用jQuery):再次加载整个包或仅加载非缓存版本的jQuery。我也不喜欢。

我的问题是:当两个框架具有相同的document.domain时,是否可以从父框架更改iframe的DOM?如果是这样,我可以将 example.com 中的jQuery克隆到child-iframe( api.example.com )吗?怎么样?或者我只是对此感到疯狂,考虑到我所描述的内容,还有更好的解决方案吗?

提前谢谢大家, 莱昂纳多。

1 个答案:

答案 0 :(得分:1)

file test.htm

<iframe name='my-iframe' src='test2.htm' onload="child();"></iframe>
<script>
function child(){
    alert(window.frames['my-iframe'].my_var);
    window.frames['my-iframe'].my_var = 'bye';
    window.frames['my-iframe'].show_var();
}
</script>

file test2.htm

<script>
window.my_var = 'hi';
function show_var(){
    alert(my_var);
}
</script>

上面的代码会提示'hi'然后'再见'