gpt4 book ai didi

javascript - 将变量传递给新创建的选项卡

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

所以我有一个内容脚本,其中有一个事件会触发一个消息到“启动”脚本,我用它来创建一个带有本地 html 文件的选项卡,并将相同的消息/变量传递给该选项卡。然后选项卡应根据变量加载指定的数据。它在大约 50% 的时间内按预期工作,这让我相信这是一个同步性问题。我可能不会以正确的方式解决这个问题,但这是我自己能解决的最好办法。

内容脚本 (script.js):

function openHistory(event) {
var account = $(/*selector*/).html();
chrome.runtime.sendMessage(account);
}

启动脚本 (launch.js):

chrome.runtime.onMessage.addListener(function(account) {
chrome.tabs.create({url: 'background.html'}, function(tab) {
chrome.tabs.sendMessage(tab.id, account);
});
});

HTML 脚本(background.js):

chrome.runtime.onMessage.addListener(function(account) {
loadPage(account);
});

function loadPage(account) {
chrome.storage.sync.get(account, function(data) {
// Do stuff with DOM
});
}

list :

{
"manifest_version": 2,

"name": "Extension",
"version": "1.0",

"permissions": ["storage", "tabs"],

"background": {
"scripts": ["launch.js"],
"persistent": false
},

"content_scripts": [{
"js": ["jquery.js", "script.js"]
}]
}

更新:我在 launch.js 中的 tabs.sendMessage 回调中添加了“alert(chrome.runtime.lastError.message)”,每当它不起作用时,我都会得到“无法建立连接,接收端不存在。”

最佳答案

我的猜测是 chrome.tabs.create 使用的回调实际上是在选项卡准备就绪时触发的,而不是在其内容加载时触发的。我不太清楚,因为 documentation因为此方法没有说明何时触发回调。

要解决此问题,最好让新打开的后台选项卡向其前身发送一条消息——如您所知,启动脚本已经启动并运行——说“向我发送详细信息”,在此时你然后触发 chrome.tabs.sendMessage(tab.id, account);

这是否有意义?

以下内容尚未经过测试,只是对可行的猜测。显然,仔细观察可能可以使用 MessageSender 来判断消息是否来自后台脚本——而不是使用对象属性。然而,我更喜欢用我自己的代码来具体说明这些事情:

HTML 脚本(background.js):

chrome.runtime.sendMessage({from: 'background'});

启动脚本 (launch.js):

chrome.runtime.onMessage.addListener(function(obj, sender) {
if ( obj && obj.from == 'background' ) {
chrome.tabs.sendMessage(sender.tab.id, obj);
}
else {
chrome.tabs.create({url: 'background.html' });
}
});

关于javascript - 将变量传递给新创建的选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17386490/

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