Сценарий модификации страницы FF Addon SDK для связи со сценарием контента не работает

Для начала я пытался разрешить связь между сценарием страницы и сценарием содержимого. Если документы точны, это должно быть легко. Вот что я делаю, я считаю, полностью в соответствии с https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/guides/content-scripts/взаимодействие-с-другими-скриптами.html#Использование%20the%20DOM%20postMessage%20API :

А вот мой живой тестовый пример:

основной.js:

exports.main = function() {
    var data = require('sdk/self').data,
            pageMod = require('sdk/page-mod');

    pageMod.PageMod({
        include: '*',
        contentScriptFile: data.url('postMessageRelay.js'),
    });
};

postMessageRelay.js

// Trying with window.addEventListener also doesn't work
document.defaultView.addEventListener('message', function (e) { // e.data, e.origin

    console.log('would be good if it got here:'+e.data);

});
console.log('it gets here at least');

А JavaScript в обычном файле HTML (на обычном удаленном сервере, а не в файле или локальный хост):

try {
    window.postMessage('webappfind', window.location.href);
}
catch(e) {
    alert(e);
}

Это действительно похоже либо на полномасштабную ошибку для этой функциональности, либо на проблему с документами... У меня были похожие проблемы при попытке связи через настраиваемые события, поэтому маленькие бананы...


person Brett Zamir    schedule 26.08.2013    source источник
comment
Ваш аддон-код в порядке. Но ваша тестовая веб-страница использует window.location.domain (== undefined) в качестве целевого источника.   -  person paa    schedule 27.08.2013
comment
Извините, меня попросили попробовать это значение, и я забыл, что я ссылаюсь на него здесь. Я вернул его обратно в window.location.href. Но это также не работает с * на brett-zamir.me/tests/webappfind2.html, хотя это работает, когда используется из window.open, а иногда и когда используется из iframe в родительский   -  person Brett Zamir    schedule 27.08.2013


Ответы (1)


Ответил на Ошибка 910972, но оставил его здесь для будущих посетителей SO:

Проблема заключалась в том, что страница сразу запускала postMessage в теге head, поэтому скрипт page-mod еще даже не был прикреплен к странице для прослушивания события сообщения. Обмен данными между сценариями страницы и контента как в этом примере работает до тех пор, пока принимается во внимание это время

person jsantell    schedule 06.09.2013
comment
И я решил эту проблему, добавив contentScriptWhen: 'start' к вызову конструктора PageMod()... (и еще раз спасибо!) - person Brett Zamir; 07.09.2013