AIR 将
childSandboxBridge
和
parentSandboxBridge
属性添加到任何子级 frame 的
window
对象中。使用这些属性,您可以定义用作父级和子级 frame 之间的接口的桥。每个桥都指向一个方向:
childSandboxBridge
—
childSandboxBridge
属性允许子级 frame 向父级 frame 中的内容公开接口。若要公开接口,需将
childSandbox
属性设置为子级 frame 中的函数或对象。然后,可以从父级 frame 中的内容访问该对象或函数。以下示例显示了子级 frame 中运行的脚本如何向其父级 frame 公开包含函数和属性的对象:
var interface = {};
interface.calculatePrice = function(){
return .45 + 1.20;
}
interface.storeID = "abc"
window.childSandboxBridge = interface;
如果此子级内容位于分配的
ID
为
"child"
的 iframe 中,则可以通过读取 frame 的
childSandboxBridge
属性从父级内容来访问接口:
var childInterface = document.getElementById("child").childSandboxBridge;
air.trace(childInterface.calculatePrice()); //traces "1.65"
air.trace(childInterface.storeID)); //traces "abc"
parentSandboxBridge
—
parentSandboxBridge
属性允许父级 frame 向子级 frame 中的内容公开接口。若要公开接口,需将子级 frame 的
parentSandbox
属性设置为父级 frame 中的函数或对象。然后,可以从子级 frame 中的内容访问该对象或函数。以下示例显示了父级 frame 中运行的脚本如何向其子级 frame 公开包含 save 函数的对象:
var interface = {};
interface.save = function(text){
var saveFile = air.File("app-storage:/save.txt");
//write text to file
}
document.getElementById("child").parentSandboxBridge = interface;
使用此接口,子级 frame 中的内容可以将文本保存到名为 save.txt 的文件。但对文件系统不具备任何其他访问权限。通常,应用程序内容向其他沙箱公开的接口应越窄越好。子级内容可以调用 save 函数,如下所示:
var textToSave = "A string.";
window.parentSandboxBridge.save(textToSave);
如果子级内容尝试设置
parentSandboxBridge
对象的属性,则运行时会引发 SecurityError 异常。如果父级内容尝试设置
childSandboxBridge
对象的属性,则运行时会引发 SecurityError 异常。