从Adobe Air中的Iframe访问顶部窗口

时间:2010-02-09 10:47:49

标签: javascript iframe air

我在使用Adobe Air时遇到了一些问题。我的应用程序具有相当复杂的架构:主html窗口加载iframe并引用javascripts(例如DWRengine.js,jquery.js,main.js等)。这样做是为了避免Air对'eval'函数的javascript限制,这在我的脚本和DWR中也被广泛使用。

在main.js文件中,我试图将事件监听器添加到主窗口的按钮和链接。

像这样:

$(document).ready(function(){
    $('body', top.document).click(function(){alert('a');});   
});

但是没有效果! top.document未定义。

我无法在加载主页时将操作绑定到事件,因为包含它们的对象仅在主页onload事件之后加载。

请帮帮我!

先谢谢你,迈克。

1 个答案:

答案 0 :(得分:1)

您正在使用两个不同的沙箱,因此您需要设置沙箱桥。

在您的情况下,您必须使用parentSandboxBridge在应用程序沙箱中的方法中公开

here are the docs in case you don't have them

所以在顶部窗口

// quoting from the docs
var interface = {};
interface.save = function(text){
    var saveFile = air.File("app-storage:/save.txt");
    //write text to file
}
document.getElementById("yourIframe").contentWindow.parentSandboxBridge = interface;

当然,这不会使您的图书馆在父母中可用,但您可以在孩子中处理并使用父母来做空气