我正在开发一个Google Chrome扩展程序,在单击上下文菜单项时会在本地存储中存储一些值。然而,我注意到,扩展的行为会有所不同,具体取决于是否正在检查。示例插件如下:
的manifest.json
{
"manifest_version": 2,
"name": "contextMenuTest",
"description": "contextMenuTest",
"version": "0.1",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"activeTab",
"storage",
"unlimitedStorage",
"contextMenus",
"notifications"
],
"icons": {
"16": "icon.png"
}
}
popup.html
<!doctype html>
<html>
<head>
<script src= "popup.js"></script>
</head>
<body>
<button id="setContextMenuButton">Set context menu</button>
<button id="showResultButton">Show Answer</button>
</body>
</html>
popup.js
document.addEventListener('DOMContentLoaded', function() {
document.getElementById("setContextMenuButton").addEventListener("click", onsetcontextmenubuttonclick);
document.getElementById("showResultButton").addEventListener("click", onshowresultbuttonclick);
});
function onsetcontextmenubuttonclick() {
chrome.storage.local.clear(function() {
chrome.contextMenus.removeAll(function() {
chrome.contextMenus.create(
{
"title": "test",
"contexts": ["selection"],
"onclick": function(info, tab) {
chrome.storage.local.set({"test":"test"});
}
}
);
});
});
}
function onshowresultbuttonclick() {
chrome.storage.local.get("test", function(items) {
console.log(items);
});
}
检查弹出窗口时会出现预期的行为:检查弹出窗口,单击“设置上下文菜单”按钮,选择一些文本并右键单击它,在上下文菜单中单击“测试”,然后检查弹出窗口并单击“显示答案“按钮。 chrome.storage.local.set()设置“test”的值,因此chrome.storage.local.get()能够正确检索它并显示{test:“test”}。
但是,在没有检查弹出窗口的第一步的情况下执行相同的步骤时,会显示{},暗示chrome.storage.local.set()在弹出窗口时没有正确设置“test”的值没有被检查。
有一个类似的问题here,但它并没有完全回答我的问题。
为什么上下文菜单的行为会有所不同,具体取决于是否正在检查插件,以及如何解决此问题?