gpt4 book ai didi

google-chrome-extension - 如何在两个不同选项卡的内容脚本之间传输数据?

转载 作者:行者123 更新时间:2023-12-05 00:33:48 24 4
gpt4 key购买 nike

在我的扩展中,我需要将一些数据从一个选项卡的内容脚本传输到另一个选项卡的内容脚本。如果我知道该选项卡对象名称或 URL 的一部分,如何使用 chrome.tabs 选择特定选项卡?两个选项卡的脚本如何通信?

更新:

显然我在 chrome.extension 中没有方法 sendMessage。当我从内容脚本运行以下内容时:

chrome.extension.sendMessage("message");

我进入控制台:

Uncaught TypeError: Object # has no method 'sendMessage'

最佳答案

首先,请注意在扩展中传递的消息是 JSON 序列化的。消息中不包含不可序列化的类型,例如函数。

在内容脚本中,您必须将消息传递到后台页面,因为没有直接访问其他选项卡的方法。

// Example: Send a string. Often, you send an object, which includes
// additional information, eg {method:'userdefined', data:'thevalue'}
chrome.extension.sendMessage(' ... message ... ');

background page ,使用 chrome.tabs.query 获取标签ID的方法。为简单起见,我对模式和网址进行了硬编码。以这种方式包含上一条消息中的查询值可能是一个好主意: {query:{...}, data:...} .
// background script:
chrome.extension.onMessage.addListener(function(details) {
chrome.tabs.query({
title: "title pattern",
url: "http://domain/*urlpattern*"
}, function(result) {
// result is an array of tab.Tabs
if (result.length === 1) { // There's exactely one tab matching the query.
var tab = result[0];
// details.message holds the original message
chrome.tabs.sendMessage(tab.id, details.message);
}
});
});

chrome.tabs.sendMessage 用于将原始数据传递到不同的选项卡。

备注:在示例中,我仅在查询产生一个唯一选项卡时传递消息。当唯一性不是先决条件时,只需使用 result.forEach 遍历所有结果选项卡即可。或者:
for (var i=0, tab; i<result.length; i++) {
tab = results[i];
...
}

关于google-chrome-extension - 如何在两个不同选项卡的内容脚本之间传输数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597416/

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