父輩安全執行程序橋接必須在子系文件中的指令碼執行之前先經過設定,Script 才能存取此安全執行程序橋接。Window、frame 和 iframe 物件都會在新網頁的 DOM 建立之後、尚未剖析任何指令碼或新增 DOM 元素之前傳送
dominitialize
事件。您可以在網頁建構程序初期,使用
dominitialize
事件建立安全執行程序橋接,讓子系文件中的所有指令碼都可以存取此橋接。
在下列範例中,會示範如何建立父輩安全執行程序橋接,以回應從子系 frame 傳送的
dominitialize
事件:
<html>
<head>
<script>
var bridgeInterface = {};
bridgeInterface.testProperty = "Bridge engaged";
function engageBridge(){
document.getElementById("sandbox").contentWindow.parentSandboxBridge = bridgeInterface;
}
</script>
</head>
<body>
<iframe id="sandbox"
src="http://www.example.com/air/child.html"
documentRoot="app:/"
sandboxRoot="http://www.example.com/air/"
ondominitialize="engageBridge()"/>
</body>
</html>
下列
child.html
文件會示範子系內容如何存取父輩安全執行程序橋接:
<html>
<head>
<script>
document.write(window.parentSandboxBridge.testProperty);
</script>
</head>
<body></body>
</html>
若要針對子系 window (而非 frame) 偵聽
dominitialize
事件,您必須將偵聽程式加入至使用
window.open()
函數建立的新子系 window 物件:
var childWindow = window.open();
childWindow.addEventListener("dominitialize", engageBridge());
childWindow.document.location = "http://www.example.com/air/child.html";
在此案例中,無法將應用程式內容對應至非應用程式安全執行程序中。這項技巧只有在從應用程式目錄以外載入
child.html
時才有用。您仍然可以將 window 中的應用程式內容對應至非應用程式安全執行程序,但是必須先載入中間網頁。中間網頁本身會使用 frame 載入子系文件,並將文件對應至所需的安全執行程序。
如果您使用 HTMLLoader 類別的
createRootWindow()
函數來建立 window,則此新的 window 就不是文件 (
createRootWindow()
的呼叫來源) 的子系。因此,您無法在呼叫端 window 與載入至新 window 的非應用程式內容之間建立安全執行程序橋接,而是必須改為在新的 window 中載入中間網頁,讓網頁本身使用 frame 載入子系文件。之後,您便可以在新 window 的父輩文件與載入至 frame 的子系文件之間建立安全執行程序橋接。