1

我有一個用戶在瀏覽器上安裝的Chrome擴展,當您打開擴展彈出窗口(後臺頁面)時,它只是加載運行在我的服務器上的整個應用程序後端。將消息發送回加載的iframe的Chrome擴展

我想要做的是在我的後端應用程序上有一些事件發送器,它可以將消息發送回加載此應用程序的chrome擴展。

我已經試過這樣:

background.html:

<body> 
    <iframe id="gateway" src="http://www.catchit.com"></iframe> 
</body> 

我發送郵件後臺頁面,說:www.catchit.com/message/send,其上點擊運行這樣的:

var event = new CustomEvent(
    "newMessage", 
    { 
     detail: { 
      users: users, 
      message: message 
     }, 
     bubbles: true, 
     cancelable: false 
    } 
); 

document.dispatchEvent(event); 

我的內容腳本等待此事件:

document.addEventListener("newMessage", function(data) { 
    chrome.runtime.sendMessage(data); 
}); 

我的背景劇本和:

chrome.runtime.onMessage.addListener(function(message) { 
    alert("message received" + message); 
}); 

但是,當然,它不會工作......因爲,該事件被IFRAME上下文(www.servera.com)

什麼時許內發射我錯過了嗎?我無法弄清楚如何回覆消息。這將是真正的應用程序加載在擴展的彈出和擴展本身之間的一個真棒橋樑,它可以稍後將消息發送到在用戶瀏覽器上打開的網站。

感謝

+1

可以[postmessage](https://developer.mozilla.org/en-US/ docs/Web/API/Window.postMessage)解決你的問題? – gonzalovazzquez

+0

我的問題是內容腳本沒有加載iframe ..我不知道該怎麼做......我想是的。 – deb0rian

回答

1

基於什麼gonzalovazzquez說,我做了這樣的解決方案:

Background.js:

// Listen for message from application (iframe) 
top.window.addEventListener("message", function(message) { 
    // Notify content-script about new message 
}); 

我的應用程序的JavaScript是iframe的應用程序的一部分:

top.window.postMessage({data: {users: users, message: message}}, "*"); 
return false; 

從這一點,你可以告訴你的內容sc通過後臺抓取實際頁面/選項卡上的操作,基於通過加載在iframe上的應用程序接收到的消息。background.html

相關問題