【问题标题】:Included JS in iframe has context of top frame windowiframe 中包含的 JS 具有顶部框架窗口的上下文
【发布时间】:2011-05-03 14:12:41
【问题描述】:
$('<script/>', {
    src: '/path/to/javascript.js',
    type: 'text/javascript'
}).appendTo($('#iframe').contents().find('body'));

如果我错了,请纠正我,但我认为应该将 JS 加载到 iframe 中。我也试过附加到head

问题
javascript.js 已执行,但该脚本中的console.debug(this) 返回顶部框架窗口。我已经尝试验证该脚本实际上是否包含在 iframe 中,但我真的不知道如何。

此外,从 javascript.js 运行 $('a') 会返回顶部框架中的所有链接,而不是我想要的 iframe 中的每个链接。

感谢您的宝贵时间!


更新:我将an isolated test caseyou also can download 放在一起。检查控制台,注意这是最上面的框架(可以通过变量_TOP来验证)。

【问题讨论】:

  • 是同一域中的 iframe,如果不是你有跨域问题

标签: javascript jquery iframe dynamic-loading


【解决方案1】:

这是一个灰色地带。对于使用 jQuery 的特定操作,根据浏览器的不同,您在后台使用 importNodeadoptNode。但是,IE 都不支持(因为我上次研究过它)。

您可能希望获得对文档的引用,然后编写脚本。如果没记错的话:

$('<iframe/>')[0].contentDocument.document.write('script');

【讨论】:

    【解决方案2】:

    我能够在同一个域中进行 iframe 更新:
    http://jsfiddle.net/maniator/DX6bg/1/

    确保这两个网址在同一个域中。
    (包括是否存在www

    更新

    你可以这样测试:

    $(function(){
       var iframe = $('#iframe').contents();
    
       $('body', iframe).append($('<div>', {text: 'this is a test'}));
    });
    

    现在,如果您在 iframe 中看到文本 this is a test,您就知道它正在工作

    【讨论】:

    • 嗯不知道你想用这个显示什么。您能否解释一下这是如何解决上下文问题的?
    • @Znarkus,你能给我们看看这个页面,以便我们可以看到错误吗?我是在向你展示你的代码有效,我认为你可能有跨域问题
    • 我已经整理了一个isolated test case,你是also can download。检查控制台,注意this是顶框(可以通过变量_TOP验证)。
    • 尝试用$(function(){/*your code here*/})包装jquery
    • 这些console.debug on "this" from iframe.js: DOMWindow 是从哪里来的?
    猜你喜欢
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多