【问题标题】:Accessing an iframe's contents in Adobe Air在 Adob​​e Air 中访问 iframe 的内容
【发布时间】:2009-04-24 13:20:58
【问题描述】:

我在弄清楚如何在 Air 中访问 iframe 中的内容时遇到了很多麻烦。这是我一直在测试的一些示例 jquery 代码。

$(document).ready(function(){ $("#frame").ready(function(){ air.trace($("#frame").contents().find("body").html()); air.trace(window.frames["frame"].innerHTML); air.trace(document.getElementById("frame").innerHTML); }); });

我使用的 iframe 是。

<iframe src="http://google.com" id="frame" width="100%" sandboxRoot="http://google.com/" documentRoot="/" name="frame" height="600"></iframe>

上面代码的输出是

null undefined

如您所见,内容始终为 null、未定义或空字符串。我是否遗漏了阻止我访问 iframe 内容的内容?任何建议将不胜感激。

【问题讨论】:

  • 当我发布 iframe 时,它​​似乎已被删除。这是我在这里的第一篇文章,所以我不确定如何发布。

标签: jquery iframe air


【解决方案1】:

解决方案在这里http://help.adobe.com/en_US/AIR/1.1/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7f08.html

这是我如何使用它的示例。

<iframe src="http://google.com/local/iframe.html" id="frame" width="100%" sandboxRoot="http://google.com/local/" documentRoot="app:/" name="frame" height="600"></iframe>

从 sandboxRoot 请求的任何内容(例如 http://google.com/local)都将从文档根目录使用,并将被视为来自同一域 (google.com)。

在 iframe.html 中,我可以将 iframe 访问到谷歌,就像它来自同一个域一样。

我知道必须有办法做到这一点:)

【讨论】:

【解决方案2】:

和其他许多人一样,我也很难弄清楚这一点。

tomfmason 在上面给出了解决方案,但即便如此,我还是花了很长时间才真正理解发生了什么。

为了帮助可能仍在尝试使用 AIR html+js 创建 Web 浏览器或从远程网页提取数据的其他人,我创建了一个非常基本的 AIR 3.2 项目(1.7 MB .zip 文件),可以在以下位置找到:

http://adobe-air-js.blogspot.com/2011/12/air-reading-dom-of-remote-web-page.html

AIR 真的很灵巧,一旦克服了最初的复杂性。我发现它比钛更可靠/更实用。

祝你好运! 〜克里斯

【讨论】:

    【解决方案3】:

    Adobe AIR 只是一个浏览器 (WebKit actually),因此遵循浏览器遵循的规则。在这里管理您的问题的规则称为“same-origin-policy”。

    如果不在同一个域中,浏览器将不允许您访问该站点的数据或内容,因此您会得到这个结果。如果您想从其他域获取数据,请使用基于 Json 的 AJAX API。

    其他人遇到此问题的示例:

    【讨论】:

    • 这确实使它变得有点:添加。
    • 我熟悉同源政策,但我认为它不适用于空中。我看不到本地 iframe 的许多实际用途。这实际上令人沮丧,因为它会阻止我添加依赖于能够访问 iframe 的 dom 的功能。
    • 其实空气是完全不同的。它能够在父窗口和子 iframe 之间设置沙箱桥,但您需要访问实际代码代码才能从子窗口公开任何内容。这是一个皮塔饼,因为我想做的就是阅读 dom。我根本不关心框架内的调用方法。我想我唯一的选择是使用服务器端代理并在将内容返回给客户端之前设置网桥
    • @altCognito:AIR 绝对不仅仅是一个重新打包的浏览器。它包括一个浏览器引擎——webkit,但不是完全的。
    • 我很好奇它不仅仅是一个重新打包的浏览器的论点。作为一个重新打包的浏览器并没有错。
    猜你喜欢
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 2011-12-16
    • 2013-05-05
    • 2017-06-28
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多