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

Javascript 是否可以从父框架(相同的document.domain)更改iframe的DOM?,javascript,jquery,iframe,cross-domain,xmlhttprequest,Javascript,Jquery,Iframe,Cross Domain,Xmlhttprequest,我想要一种简单而轻量级的方法,向我的api地址(api.example.com)发出跨域请求,api地址是我主域(example.com)的子域 我已经读了很多关于处理XDR的技术和技巧,以及它们与每个使用过的浏览器的不兼容性,但是XDR对我来说仍然非常复杂。我不需要像easyXDM那样的完整/复杂的解决方案,我已经实现并完美地工作了 因此,我决定“启用CORS”,这解决了现代Webkit和Gecko浏览器的问题。但和往常一样,IE(在本例中还有Opera)还不能与CORS兼容 当我想继续使用j

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

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

因此,我决定“启用CORS”,这解决了现代Webkit和Gecko浏览器的问题。但和往常一样,IE(在本例中还有Opera)还不能与CORS兼容

当我想继续使用jQueryAjax方法时,我搜索了一个允许XDR使用jQuery方法的解决方案。然后,我实现了一个非常好的解决方案,它替换了jQuery.ajax()方法及其所有依赖的方法:。他的脚本基于document.domain/iframe技巧

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

我对上面链接的脚本唯一不满意的是,我需要从api.example.com加载jQuery库,我不希望这样。我在example.com使用的一个文件中创建了一个小型javascript库/插件/脚本包;这给了我两个选项(用于在api.example.com中使用jQuery):再次加载整个捆绑包或仅加载jQuery的非缓存版本。我也不喜欢

我的问题是:当两个帧具有相同的document.domain时,是否可以从父帧更改iframe的DOM?如果是这样,我可以将jQuery从example.com克隆到子iframe(api.example.com)中吗?怎么用?或者我只是对这件事很着迷,考虑到我所描述的,有更好的解决方案吗

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

文件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>

函数子(){
警报(window.frames['my-iframe'].my_var);
window.frames['my-iframe'].my_var='bye';
window.frames['my-iframe'].show_var();
}
文件test2.htm

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

window.my_var='hi';
函数show_var(){
警报(my_var);
}
上面的代码将发出警报“嗨”,然后是“再见”

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>

函数子(){
警报(window.frames['my-iframe'].my_var);
window.frames['my-iframe'].my_var='bye';
window.frames['my-iframe'].show_var();
}
文件test2.htm

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

window.my_var='hi';
函数show_var(){
警报(my_var);
}

上面的代码将发出“hi”和“bye”警报

如果两个帧引用的是服务器上的同一个文件,则只能下载和缓存一次内存使用情况如何?加载两次相同的、不小的文件将占用可以保存的内存。这在移动浏览器中更为重要,对此我只能猜测。我从来没有想过这个文件是否被加载到内存中两次,我想它不是。我试图在网上查找信息,但无法正确获取搜索词。如果两个帧都引用服务器上的同一个文件,则只能下载和缓存一次内存使用情况如何?加载两次相同的、不小的文件将占用可以保存的内存。这在移动浏览器中更为重要,对此我只能猜测。我从来没有想过这个文件是否被加载到内存中两次,我想它不是。我试图在网上四处寻找信息,但我无法找到正确的搜索词。谢谢!回答了我的问题。可以在子iframe中设置属性。对于那些想知道我是否得到了我想要的工作的人:我没有:(.仍在尝试。到目前为止,我能够做的是克隆整个jQuery并附加到子iframe。问题是资源过载继续发生(就像用脚本标记加载整个框架一样)。我现在尝试的是在iframe中创建一个唯一的XHR对象,并从主域调用它,但迄今为止没有成功…谢谢!回答了我的问题。可以在子iframe中设置属性。对于那些想知道我是否得到了想要的工作的人:我没有:(.仍在尝试。到目前为止,我能够做的是克隆整个jQuery并附加到子iframe。问题是资源过载继续发生(就像用脚本标记加载整个框架一样).我现在想做的是在iframe中创建一个唯一的XHR对象,并从主域调用它,但到目前为止没有成功。。。