2013-08-26 33 views
0

對於初學者,我一直試圖允許從頁面腳本到內容腳本的通信。如果文檔是準確的,這應該很容易。下面是我在做什麼,我相信完全按照https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/guides/content-scripts/communicating-with-other-scripts.html#Using%20the%20DOM%20postMessage%20APIFF Addon SDK頁面mod腳本內容腳本通信不起作用

這是我的生活test case

main.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'); 

regular HTML file內的JavaScript(在普通的遠程服務器上,而不是文件或localho ST):

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

這的確看起來像任何一個成熟的錯誤此功能或與文檔一個問題...我有類似的問題,嘗試通過custom events溝通那麼回事了一點香蕉...

+0

您的插件代碼沒問題。但是您的測試網頁使用window.location.domain(==未定義)作爲目標原點。 – paa

+0

對不起,被要求嘗試這個價值,並忘記我在這裏連接它。我已將它恢復爲「window.location.href」。但它也不適用於http://brett-zamir.me/tests/webappfind2.html的'*',雖然它在[window.open中使用]時有效(http://brett-zamir.me/ tests/webappfind3.html),有時當[從iframe到父母使用](http://brett-zamir.me/tests/webappfind-iframeHolder.html) –

回答

1

回答Bug 910972,但在這裏留下它的SO未來用戶:

的問題是與頁面立即在head標籤發射postMessage,所以頁面-MOD腳本甚至還沒有連接到頁面收聽留言事件。在頁面和內容腳本之間來回通信as in this example works只要將此時間考慮在內

+0

我解決了這個問題,通過添加'contentScriptWhen:'start''到'PageMod()'構造函數調用...(再次感謝!) –

相關問題