gpt4 book ai didi

google-chrome-extension - 我试图在使用 list v3 时进行 chrome 扩展并获取 localStorage 未定义错误

转载 作者:行者123 更新时间:2023-12-05 00:53:07 29 4
gpt4 key购买 nike

使用 manifest v2 可以正常工作。但是使用 manifest v3 我收到错误“ReferenceError: localStorage is not defined”

manifest.json

{
"name": "Getting Started Example",
"description": "Build an Extension!",
"version": "1.0",
"manifest_version": 3,
"background": {
"service_worker": "background.js"
},
"permissions": ["storage", "activeTab", "contextMenus"],
"action": {
"default_popup": "popup.html"
}
}

background.js

var contextMenuItems = {
"title": 'Add to notepad"',
"contexts": ["selection"],
"id": "myContextMenuId"
};
chrome.contextMenus.create(contextMenuItems);
chrome.contextMenus.onClicked.addListener(function(clickData){
if(clickData.menuItemId == "myContextMenuId" && clickData.selectionText){
localStorage.setItem("text", "clickData.selectionText");
}
});

最佳答案

ManifestV3 中的后台脚本现在是一个 service worker,因此它无法访问仅在 window 上公开的内容,例如 HTML5 localStorage 或 DOM。顺便说一句,Service Worker 没有 window,它们的全局上下文是 selfglobalThis

解决办法是切换到chrome.storage.local .这是一个完全不同的存储,可用于所有扩展上下文,包括内容脚本。请注意,a) 它是异步的,因此用法不同;b) 由于 bug in Chrome,它当前不返回 Promise。所以你不能 await 它。在修复之前,请使用文档中显示的回调版本。

存储:

chrome.contextMenus.onClicked.addListener(info => {
if (info.menuItemId == 'myContextMenuId' && info.selectionText) {
chrome.storage.local.set({text: info.selectionText});
}
});

在弹出窗口中阅读:

chrome.storage.local.get('text', ({text}) => {
// the callback runs asynchronously so you should use the value here
document.body.prepend(text);
});

关于google-chrome-extension - 我试图在使用 list v3 时进行 chrome 扩展并获取 localStorage 未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68363410/

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