У меня есть приложение без chrome с некоторым привилегированным кодом JavaScript, взаимодействующим с системой. Теперь я хочу смешать привилегированный JavaScript (jsctypes) с приложением, размещенным на сервере. Удаленное приложение будет загружено в Iframe, а взаимодействие между приложением без хрома и удаленным приложением произойдет через html5 postMessage.
Родитель отправляет сообщение в содержащийся Iframe и успешно получен Iframe с e.origin как «resource:\app», тогда как если я попытаюсь отправить сообщение из Iframe в window.parent с доменом в качестве ресурса:\app прослушиватель onmessage в родитель не вызывается
Расположение,
При выполнении >chromeless examples\testapp\index.html В папке сборки chromeless создается приложение xul, и отображается следующее.
+-----------------------------------Chromeless----+ | | | --- MessageToIframeButton | | | | +--------------------------Iframe--+ | | |Msg Recvd from: resource://app | | | |(this is the message from parent) | | | | | | | | _TxtBox_sendMessage | | | | | | | | | | | | | | | +----------------------------------+ | | Msg Recvd: | | | +-------------------------------------------------+
postMessage внутри Iframe
[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, я пытался реализовать междоменную связь с помощью пользовательских событий, но не смог,
В Priviliged index.html [примеры Chromeless\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), тогда родительское окно получает уведомление, но не через иерархию. Я пропустил что-то основное??