我尝试将来自web_accessible_resource的消息发布到我的Chrome扩展程序的内容脚本。
我的manifest.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'}, '*');
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"});
});
我该怎么办?我是否需要为我的内容脚本设置一些授权或其他内容?为什么这不起作用?
答案 0 :(得分:2)
您现在可以启用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(){});
请参阅:https://developer.chrome.com/extensions/messaging#external-webpage
答案 1 :(得分:1)
当我问我的问题时,我当然有一个想法......
......工作。
当然我需要在我的content.js中附加一个window.addEventListener:
window.addEventListener("message", function(e) {
if (e.data.type === 'closeSidebar') {
// that works now
}
});