gpt4 book ai didi

javascript - 为什么我的 Chrome 扩展内容脚本的运行时没有任何 onMessage 仅连接和发送消息

转载 作者:行者123 更新时间:2023-11-28 00:21:45 25 4
gpt4 key购买 nike

我已经为此苦苦挣扎了好几天,我的扩展程序的内容脚本似乎缺少权限或其他东西,我搜索了 API 文档,但什么也没找到。

如果我使用以下代码从内容页面发送消息,而不是向内容页面发送消息,则消息传递有效:

从后台页面:

var messageCallback = function (e) {
var nodeMessage = JSON.parse(e.data);

switch (nodeMessage.ExecutionType) {
case 0:
chrome.tabs.create({ url: nodeMessage.Url }, function (tab) {

//injects injected.js NOT messages.js
injectCode(tab.id);

chrome.tabs.sendMessage(tab.id,nodeMessage);
});
break;
//some other switch cases...

来自内容脚本:

chrome.runtime.onMessage.addListener(function (message) {
console.log('Message received');

var event = new CustomEvent("foo_receive", {
detail: message,
bubbles: true
});

console.log('Event sent');
document.dispatchEvent(event);
});

我的 list 如下所示:

{
"manifest_version": 2,

"name": "extesnion_name",
"short_name": "thing",
"description": "long sentence",
"version": "1.0.0",
"icons": { "16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png" },
"permissions": ["background", "tabs", "<all_urls>" ],
"background": {
"scripts": ["background.js"],
"persistent": true
},
"content_scripts":[
{
"matches": ["<all_urls>"],
"js": ["messages.js"],
}
],
"web_accessible_resources": ["injected.js"]
}

在 Chrome 控制台中显示以下内容:

内容脚本:

enter image description here

和背景页:

enter image description here

最佳答案

你还没有向我们展示,但我猜你的后台脚本已经展示了

function injectCode(tabId) {
chrome.tabs.executeScript(tabId,{"file":"contentScript.js"});
}

问题是这个函数是异步的。浏览器不会等待它完成,而是继续执行后台脚本,该脚本将消息发送到不存在的内容脚本。然后 injectCode 完成,但为时已晚。

Here是一个很好的引用。简而言之,您需要使用callback选项,这样您最终会得到

chrome.tabs.executeScript(tabId,{"file":"contentScript.js"},function() {
chrome.tabs.sendMessage(tabId,nodeMessage);
});

但现在您需要重做 injectCode 函数来跟踪 nodeMessage

关于javascript - 为什么我的 Chrome 扩展内容脚本的运行时没有任何 onMessage 仅连接和发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29945179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com