将javascript / css插入跨不同域的iframe

时间:2011-02-28 20:50:30

标签: javascript jquery iframe cross-domain

我有一个本地网页(在我的文件系统上)。我希望在显示domain.com的页面上加载iframe。我想更改iframe内容。

我可以访问domain.com并可以让他们为我托管一个javascript文件。所以这应该意味着我不会遇到同源的问题。我的文件需要很长时间才能上传,因为它是由不同的团队完成的。我的想法是在我的js文件中的服务器domain.com上我可以在myserver.com上调用另一个js文件。它是否被包含在domain.com js文件中它应该工作......好吧它没有。

这可能吗?

domain.com js文件如下:

$(document).ready(function(){
    $.getScript("http://www.myserver.com/my.js");
});
我服务器上的my.js正在进行

alert($("iframeID").contents().find('body').html());

返回null

如果我在my.js中

alert('test');

我收到了测试通知。

2 个答案:

答案 0 :(得分:2)

同源策略适用于源,而不适用于JavaScript。如果您的网页来自一个地方(file://网址)而另一个网页来自其他网域,那么您的脚本托管位置无关紧要。

答案 1 :(得分:1)

我不确定我的情景100%。如果我错了,请纠正我:

  1. 您有一个包含iframe的网页,iframe指向domain.com上的网页
  2. domain.com上的页面尝试使用$.getScript()
  3. 从myserver.com检索您的脚本
  4. 脚本加载后,需要修改domain.com页面上的DOM(iframe中的那个)
  5. 代码示例iframeID中的元素alert($("iframeID")...引用您网页上的iframe,其中显示了来自domain.com的网页
  6. 如果这是正确的,问题是在domain.com上的iframe内执行的javascript对iframe一无所知。它甚至不知道它在iframe中。您可以像处理任何其他HTML文档一样操作页面,因为脚本在domain.com中的页面内执行 - 脚本最初来自哪里并不重要。

    因此,您可以非常简单地在domain.com中打印页面的body

    alert($(body).html())