javascript - window.postMessage 从 web_accessible_resource 到内容脚本

标签 javascript google-chrome-extension postmessage

我尝试将消息从 web_accessible_resource 发布到我的 Chrome 扩展程序的内容脚本。

我的设置:

ma​​nifest.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       
  }
});

run.js

window.postMessage({type: 'foo'}, '*');

我也尝试过有效的方法:

直接在run.js中添加监听器:

window.addEventListener("message", function(msg) {
  if (msg.data.type === 'foo') {
    // that one works
  }
});

从后台脚本发布消息:

chrome.tabs.getCurrent(function (tab) {
  chrome.tabs.sendMessage(tab.id, {type: "foo"});
});

问题:

我必须做什么?我是否需要为我的内容脚本设置一些授权或其他内容,或者为什么这不起作用???

最佳答案

您现在可以启用 API 将消息直接从网页发送到您的扩展程序 ID

在 list 中启用

"externally_connectable": {
  "matches": ["*://*.example.com/*"]
}

从网页发送消息:

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

在扩展中接收:

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

参见:https://developer.chrome.com/extensions/messaging#external-webpage

关于javascript - window.postMessage 从 web_accessible_resource 到内容脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18055800/

相关文章:

javascript - 同一域中不同窗口之间的通信

javascript - 如何在 Ember.js 中循环排序数组 Controller ?

javascript - 引发后导致浏览器执行未分配给事件的 javascript 的 'default' 事件是什么?

javascript - 如何在 vuejs/vue.js 中的 contenteditable true div 内的 span 标签中调用按键事件?

javascript - 如何动态更改chrome扩展图标

javascript - Chrome 扩展程序 : reposition browser action popup. html 页面

javascript - 无论位置如何,如何获得一致的笔划宽度?

javascript - chrome.runtime.lastError 是 'UNDEFINED' 尽管从 chrome 本地存储中获取了一个未设置的变量,

JavaScript iFrame 到父级 postMessage 问题

javascript - 替代使用 postMessage() 连续消息弹出来控制状态