gpt4 book ai didi

javascript - 背景内容脚本消息 : message sent before content script is ready

转载 作者:行者123 更新时间:2023-11-30 12:23:33 24 4
gpt4 key购买 nike

当试图将消息从后台脚本传递到内容脚本时,我正在使用

chrome.tabs.query(
{active: true, currentWindow: true},
function(tabs) {
chrome.tabs.sendMessage(
tabs[0].id,
{greeting: "hello"},
function(response) {
console.log(response.farewell);
}
);
});

在后台脚本和相应的监听器中

chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting === "hello") {
sendResponse({farewell: "goodbye"});
}
});

在内容脚本中(根据 the documentation )。

现在,我可能想在当前选项卡的 Web 请求完成时向内容脚本发送一些内容,例如,

chrome.webRequest.onCompleted.addListener(
// sender code from above
)

但是我发现,当内容脚本尚未注入(inject)页面时,后台脚本会发送消息。因此,没有回复。

如何解决这个问题?是否有我可以在后台脚本中监听的事件,告诉我何时加载了内容脚本?

最佳答案

最安全的方法是从内容脚本发送消息表明它已准备就绪,然后才从后台页面回复。

例如,您可以为每个选项卡 ID 添加一个队列,然后将消息推送到那里,当来自该选项卡的消息到达时,将队列提供给它。

您也可以尝试使用编程注入(inject)而不是 list 注入(inject):

chrome.tabs.executeScript({file: "yourContentScript.js"}, function() {
// After the above finishes executing
/* your messaging code */
});

但是,如果您在导航提交之前调用它,即在选项卡的上下文实际更改之前(这可能发生在 webRequest 事件中),您的脚本将尝试在上一个页面中注入(inject),并将被转换删除。

关于javascript - 背景内容脚本消息 : message sent before content script is ready,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30248557/

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