システムと対話するいくつかの特権 JavaScript コードを含むクロムレス アプリケーションがあります。サーバーでホストされているアプリケーションを使用して、特権 JavaScript (jsctypes) をマッシュアップしたいと考えています。リモート アプリケーションは Iframe に読み込まれ、クロムレス アプリケーションとリモート アプリケーション間のやり取りは html5 postMessage を通じて行われます。
親は含まれている Iframe にメッセージを投稿し、e.origin を「resource:\app」として Iframe によって正常に受信されますが、ドメインを resource:\app として Iframe から window.parent に postMessage を試みた場合、onmessage リスナーは親は呼び出されません
レイアウト、
実行すると、 >chromeless examples\testapp\index.html chromeless build フォルダに xul アプリケーションが生成され、以下のように表示されます。
+------------------------------------クロムレス----+ | | | | | | --- MessageToIframeButton | | | | | | | +--------------------------Iframe--+ | | | |メッセージ受信元: resource://app | | | | | |(これは保護者からのメッセージです) | | | | | | | | | | | | | | | _TxtBox_sendMessage | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +------------------------------------------------+ | | | メッセージ受信: | | | | | +---------------------------------------------------------------- +
Iframe 内の postMessage
[Code]
var sendMessage = function(){
var iframe = window.parent;
iframe.postMessage("test","resouce://app");
};
[/Code]
親の onMessage 、
var onmessage = function(e) {
alert("message");
}
if(typeof window.addEventListener != 'undefined') {
window.addEventListener('message', onmessage, false);
}
else if(typeof window.attachEvent != 'undefined') {
window.attachEvent('onmessage', onmessage);
}
どんな助けでも大歓迎です!
Palantさん、カスタムイベントを使ってクロスドメイン通信を実装しようとしましたがうまくいきませんでした。
特権 index.html [Chromeless examples\testapp\index.html]:
var myExtension = {
myListener: function(evt) {
alert("Received from web page: " +
evt.target.getAttribute("attribute1"));
}
}
document.addEventListener("MyExtensionEvent", function(e) {myExtension.myListener(e); }, false, true); // The last value is a Mozilla-specific value to indicate untrusted content is allowed to trigger the event.
//content.addEventListener("MyExtensionEvent", function(e) {myExtension.myListener(e); }, false, true); //Also tried with content.
リモート アプリ Iframe remote.html で: ボタンをクリックすると、
var element = document.createElement("MyExtensionDataElement");
element.setAttribute("attribute1", "foobar");
document.documentElement.appendChild(element);
var evt = document.createEvent("Events");
evt.initEvent("MyExtensionEvent", true, false);
element.dispatchEvent(evt);
トリガーされたイベントは、特権のある親ドメインにバブリングしません。eventListener が Iframe 自体に追加された場合、ディスパッチされたイベントが受信されます。同様に、カスタム イベントが特権のあるコンテキスト (index.html) で生成された場合、親ウィンドウは受信します。通知ですが、階層全体ではありません。基本的なものが欠けていますか??