Javascript window.postMessage从web\u可访问\u资源到内容脚本

Javascript window.postMessage从web\u可访问\u资源到内容脚本,javascript,google-chrome-extension,postmessage,Javascript,Google Chrome Extension,Postmessage,我试图将一条来自网络可访问资源的消息发布到我的chrome扩展的内容脚本中 我的设置: 部分清单。json: "content_scripts": [{ "matches": ["http://*/*"], "js": ["content.js"] }], "web_accessible_resources": ["run.js"] content.js // this listener is never triggered ;-( chrome.extension.onMessage

我试图将一条来自网络可访问资源的消息发布到我的chrome扩展的内容脚本中

我的设置: 部分清单。json:

"content_scripts": [{
  "matches": ["http://*/*"],
  "js": ["content.js"]
}],
"web_accessible_resources": ["run.js"]
content.js

// this listener is never triggered ;-(
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
  if (request.type === 'foo') {
    // do whatever i want if request.type is foo       
  }
});
window.postMessage({type: 'foo'}, '*');
run.js

// this listener is never triggered ;-(
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
  if (request.type === 'foo') {
    // do whatever i want if request.type is foo       
  }
});
window.postMessage({type: 'foo'}, '*');
我也尝试过一些有效的方法: 直接在run.js中添加侦听器: 从后台脚本发布消息: 问题:
我该怎么办?我是否需要为我的内容脚本设置一些授权或其他内容,或者为什么这不起作用?

就在我问我的问题时,我有一个想法,当然

。。。成功了

当然,我需要在我的content.js中附加window.addEventListener:

window.addEventListener("message", function(e) {
  if (e.data.type === 'closeSidebar') {
    // that works now
  }
});

现在,您可以启用api将消息直接从网页发送到扩展id

在清单中启用

"externally_connectable": {
  "matches": ["*://*.example.com/*"]
}
从网页发送消息:

chrome.runtime.sendMessage(editorExtensionId, {openUrlInEditor: url},
  function(response) {
    if (!response.success)
      handleError(url);
  });
分机接收:

chrome.runtime.onMessageExternal.addListener(function(){});

请参阅:

这个问题和答案已经有三年的历史了。事情可能已经改变了,但谢谢你的否决票。。。