2017-04-20 115 views
0

我知道有可能将postMessage从网页扩展到Chrome扩展,并获得良好的回应回到网页,但它可能是另一种方式吗?从Chrome扩展到网页的通信

我的问题“我需要能够发送的请求到一个网页,等待我可以在扩展使用。也许不是使用于PostMessage的回应?”

我知道文档说“只有网页可以启动连接”。 (https://developer.chrome.com/extensions/messaging#external-webpage

这里是我想尝试如此的票价。

background.js

chrome.extension.sendMessage("Hello from extension to webpage"); 
window.postMessage("Hello from extension to webpage"); 
chrome.tabs.sendMessage(TAB_ID, "Hello from extension to webpage"); 

webpage.js(而不是扩展的一部分)

window.onmessage = (event) => { 
    // Waiting for that message. 
    console.info("Event received ", event); 
} 
window.chrome.runtime.connect(CHROME_EXTENSION_APP_ID).onMessage.addListener(function(){ 
    function(request, sender, sendResponse) { 
    console.info("Event received from the extension", event); 
    } 
}) 

任何想法可以理解 :)

+0

使用内容脚本和常规DOM消息,如CustomEvent。 – wOxxOm

+0

尝试检查[与嵌入页面通信](https://developer.chrome.com/extensions/content_scripts#host-page-communication)和相关的SO [post](http://stackoverflow.com/a/ 19048254/5995040),如前所述,如果您正在使用内容脚本,则可能会发生这种情况。您也可以查看[论坛](https://groups.google.com/a/chromium.org/forum/#!topic/chromium-extensions/lTUDJYClBF0),其中介绍了如何将信息从扩展程序传递到网页。希望这可以帮助。 –

回答

1

您可以使用chrome.tabs.executeScript API来做到这一点。

 var dataToWebPage = {text: 'test', foo: 1, bar: false}; 
     chrome.tabs.executeScript({ 
      code: '(' + function(params) { 
       //This function will work in webpage 
       console.log(params); //logs in webpage console 
       return {success: true, response: "This is from webpage."}; 
      } + ')(' + JSON.stringify(dataToWebPage) + ');' 
     }, function(results) { 
      //This is the callback response from webpage 
      console.log(results[0]); //logs in extension console 
     }); 

请注意,它需要标签permission

+0

谢谢Mûhámmàd - executeScript工程.. – Nederby