У меня есть приложение Chrome без некоторого привилегированного кода JavaScript, взаимодействующего с системой. Теперь я хочу объединить привилегированный JavaScript (jsctypes) с приложением, размещенным на сервере. Удаленное приложение будет загружено в Iframe, а взаимодействие между приложением chromeless и удаленным приложением происходит через html5 postMessage.
Родитель отправляет сообщение в содержащийся Iframe и успешно принимается Iframe с e.origin как «resource: \ app»
тогда как, если я пытаюсь отправить сообщение из Iframe в window.parent с доменом в качестве ресурса: \ app, прослушиватель onmessage в родительском объекте не вызывается
Макет,
При выполнении> chromeless examples \ testapp \ index.html
Приложение xul генерируется в папке сборки chromeless и отображается следующее.
+-----------------------------------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 of Parent,
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 [Примеры без Chrome \ 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);
Инициированное событие не отправляется в привилегированный родительский домен. Если в сам Iframe добавляется eventListener, отправляется Событие, и аналогично, если пользовательское событие генерируется в привилегированном контексте (index.html), то родительский окно получает уведомление, но не по всей иерархии. Я что-то упускаю из виду?