我想将任何网页上的文本(使用内容脚本处理选择)记录到作为弹出窗口资源的数据库中,以便在一个地方收集文本。
我正在尝试什么我在弹出页面中创建一个数据库并尝试从内容脚本管理它,尽管弹出窗口不活动(未打开)通过使用 chrome 消息传递但不能使弹出窗口接收来自内容脚本的任何消息。
我不确定使用消息传递来解决这个问题。有没有更好的解决方案?
我想将任何网页上的文本(使用内容脚本处理选择)记录到作为弹出窗口资源的数据库中,以便在一个地方收集文本。
我正在尝试什么我在弹出页面中创建一个数据库并尝试从内容脚本管理它,尽管弹出窗口不活动(未打开)通过使用 chrome 消息传递但不能使弹出窗口接收来自内容脚本的任何消息。
我不确定使用消息传递来解决这个问题。有没有更好的解决方案?
内容脚本无法将消息发送到不可见的弹出窗口,因为弹出窗口的上下文在隐藏时处于非活动状态(关闭)。
您的问题有几种解决方案。
如果您的“数据库”实际上是一个简单的键值存储,请切换到chrome.storage
API。此 API 可用于内容脚本和弹出窗口,并附带一个事件来通知您值更改。
例子:
// Get notified of changes (in the popup?)
chrome.storage.onChanged.addListener(function(changes, areaName) {
// Do whatever you want with the changes.
});
// Initialization of the popup (print initial information?)
chrome.storage.local.get({keyName: 'defaultValue'}, function(items) {
// Do something with items.keyName
});
// Content script, storage (remember document title?)
chrome.storage.local.set({keyName: document.title});
弹出窗口和后台/事件页面共享相同的过程。与弹出窗口相关的任何数据库也可用于后台页面,反之亦然。此方法的高级概述:
chrome.runtime.getBackgroundPage
)并处理结果。我在此答案中提供了与此流程对应的代码。