gpt4 book ai didi

javascript - 将消息从开发工具面板发送到 Chrome 扩展程序中的新选项卡

转载 作者:行者123 更新时间:2023-11-28 06:39:51 25 4
gpt4 key购买 nike

我应该将数据从我的开发工具面板发送到选项卡。当我使用 chrome.tabs.sendMessage 发送消息时,为什么没有收到消息?

面板.js

$(".options").on("submit", "form", function(e) {
e.preventDefault();
newTabPort = chrome.runtime.connect({ name: "new tab" });
newTabPort.postMessage($(this).serializeArray());
});

背景.js

chrome.runtime.onConnect.addListener(function(port) {
port.onMessage.addListener(function(message) {
console.log(message);
});

if (port.name == "new tab") {
chrome.tabs.create({'url': chrome.extension.getURL('page/request_sending_page.html')}, function(tab) {});
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
var activeTab = tabs[0];
chrome.tabs.sendMessage(activeTab.id, {message: "olololololololo"});
});
}
});

my_extension_page.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
$("body").append("Hello world <br>");
$("body").append(request.message);
});

谢谢!

最佳答案

所有具有函数回调的 Chrome API 都是异步的,因此在您的代码中,chrome.tabs.create 会在整个函数代码完成后执行,因此 chrome.tabs.query > 在下一行看不到新创建的选项卡。

  1. 将应处理异步调用结果的代码移至回调中
  2. 等待新标签完全加载后再发送消息
  3. 从后台脚本打开标签页时,不需要 chrome.extension.getURL
<小时/>
chrome.tabs.create({url: '/page/request_sending_page.html'}, function(tab) {
var newTabId = tab.id;
chrome.tabs.onUpdated.addListener(function onComplete(tabId, info, tab) {
if (tabId == newTabId && info.status == "complete") {
chrome.tabs.onUpdated.removeListener(onComplete);
chrome.tabs.sendMessage(tabId, {message: "olololololololo"});
}
});
});

附注manifest.json: "permissions": ["tabs"]

关于javascript - 将消息从开发工具面板发送到 Chrome 扩展程序中的新选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33954670/

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