【问题标题】:how do i get javascript injected ouside of iframe to execute in global scope我如何让 javascript 在 iframe 之外注入以在全局范围内执行
【发布时间】:2013-08-03 04:39:37
【问题描述】:

希望我问的是对的..

这是我的情况: 我在 iframe 中运行 html,该 iframe 调用控制器以获取其中引用的 javascript 文件的视图..

所以.. 主页:

<html>
<body>
<iframe src="page2.html" />
</body>
</html>

page2.html:

<html>
<body>
<script>
$.ajax({
  url: "controller\myview",
  type: "POST",
  data: null,
  dataType: "html"
}).done(function(view) {
 var body = $(window.top.document.body);
 body.append(view);
});
</script>
</body>
</html>

myview 发回一个典型的,但在它的底部有一个标签,用于创建表单的对话框。这里的重点是在 iframe 之外获取 jquery ui 对话框,当我检查 DOM 时它在 iframe 之外;但是,当现在在主页中的 javascript 执行时,它似乎认为它一直在 iframe 中。

看起来我有一个范围问题,但我不知道如何解决它。我曾希望如果我将脚本标记放在主页中,它会将自身范围限定在 iframe 之外,我什至尝试将范围文件移动到 head 标记但没有运气..

有什么建议吗?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    当您可以在主页面中进行 ajax 调用时,为什么您有一个页面的 iFrame 来对控制器/myview 进行 ajax 调用?如果您在主 html 页面中进行 ajax 调用,您可以在它自己的范围内处理它,这应该消除整个范围问题,并在您使用它时摆脱多余的 iFrame。抱歉,如果我误解了您的问题,这有点令人困惑。

    【讨论】:

    • 因此,目前该网站的设置方式是在 MVC 网站托管的 iframe 中包含以经典 asp 编写的项目列表。 janky 我知道,但我也试图避免重新编码该页面。项目详细信息在 MVC 中构建,并在单击项目超链接时通过 jquery ajax 调用进行调用。因此,为了获得将显示 iframe 之外的经典 asp 页面返回的视图的对话框,我必须将部分视图注入父容器,然后在其上调用 jquery ui 的对话框方法。这就是我的问题所在..
    • 快速提问,项目详情所在的域与主页域相同吗?
    • 是的,域是一样的。我的控制器调用在说“myserver/listofitems/items/details”,我的页面在“myserver/pages/lists/items.asp”,该站点正在将旧 asp 转换为新 mvc,这个 iframe bs 是权宜之计。
    • 好吧,我尝试通过使用 iframe 和源 page2.html 创建一个 main.html 来进行复制。然后在我的 page2.html 中,我只是复制并粘贴了您的: var body = $(window.top.document.body); body.append("测试");看看它是否会将 TEST 附加到我的 main 正文中,这很好,所以我不确定您在访问顶部窗口方面是否确实存在范围问题。也许发布更多代码并确保它不是其他问题,例如 jquery ui 的问题。
    • 这与附加无关,这很容易做到,如果我将 javascript 附加到父窗口(或在这种情况下为 window.top.document.body),则 javascript 将像仍然执行一样执行在 iframe 中。这就是我所说的范围界定问题。因此,如果我将“”附加到 window.top.document.body 它将返回 iframe 的主体标签,而不是 window.top(或托管 iframe 的父窗口) ..这是我问题的症结
    【解决方案2】:

    window.top... 真的会把你带到父母那里吗?
    有关更多 cmets/代码,请参阅 How to access parent Iframe from javascriptJavaScript dynamically loaded into iframe runs in parent scope

    还请记住,您无法从 iframe 获取数据到父级 - 如果可以的话,您可以注册 mybank.cn 并将 mybank.com 加载到 iframe 中,占用所有空间,然后窃听 mybank。 com 在 iframe 中。

    【讨论】:

    • 我看到很多关于在创建 iframe 时将 javascript 加载到 iframe 的文章;我想要做的是从 INSIDE 加载 javascript OUTSIDE 一个 iframe。不幸的是,当我这样做时,它最终执行了 javascript,就好像它仍在 iframe 中一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多