gpt4 book ai didi

javascript - chrome.tabs.create 中的 Chrome.extension.sendMessage

转载 作者:行者123 更新时间:2023-11-29 10:41:54 25 4
gpt4 key购买 nike

我需要创建一个 chrome 扩展程序来捕获当前可见的选项卡并在新选项卡中打开它。我使用以下代码:

发送.js

    function openNextPage(imagesrc) {  
chrome.tabs.create({url: "newScreen.html"},function(tab){
chrome.runtime.sendMessage({someParam: imagesrc},function(response){console.log(response);});
}
);
}

newScreen.html 中,我包含了 receive.js,如下所示:

window.addEventListener("load",function(){
console.log('contents Loaded');
chrome.runtime.onMessage.addListener(function(request,sender,response) {
console.log(request.someParam);
});
});

问题是,一旦创建了新标签(第一个 newScreen.html )我可以看到 Contents Loaded 消息,但看不到 imagesrc。可能是因为 onMessage.addEventListener 稍后执行(在 sendMessage 之后)。

但如果我再次单击我的扩展程序并打开第二个 newScreen.html ,则前一个 newScreen.html 会收到消息并打印出来。如果我打开第三个选项卡,第一个和第二个选项卡将再次收到消息。问题是 sendMessage 甚至在添加 onMessageListener 之前就执行了。我将 TimeOut 用于 sendMessage 但徒劳无功。帮帮我!

最佳答案

你说

Maybe because the onMessage.addEventListener is executed later (after sendMessage).

是的,没错:您正在使用 window.onload监听器等待窗口加载,但消息在窗口完全加载之前发送。你应该把你的 chrome.runtime.onMessage window.onload 之外的监听器听众,像这样:

chrome.runtime.onMessage.addListener(function(request,sender,response) {
console.log(request.someParam);
});

window.addEventListener("load",function(){
console.log('contents Loaded');
});

如果需要,您可以将请求存储在某个全局变量中,以便您可以在window.onload 中使用它。事件处理程序并确保在加载窗口时完成所有工作,如下所示:

var MY_PARAMETER;
chrome.runtime.onMessage.addListener(function(request,sender,response) {
MY_PARAMETER = request.someParam;
});

window.addEventListener("load",function(){
// Now you are sure that the window is loaded
// and you can use the MY_PARAMETER variable
console.log("Contents loaded, MY_PARAMETER =", MY_PARAMETER);
});

显然,您需要将此 receive.js在标记之上的脚本,在 <head> 内文档,以确保尽快添加监听器:

<html>
<head>
...
<script src="/path/to/request.js"></script>
...
</head>
...
</html>

关于javascript - chrome.tabs.create 中的 Chrome.extension.sendMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27466817/

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