我正在尝试加载包含if / else语句的后台脚本(extension-starter.js)。我将用户的首选项存储在本地存储中,以了解如何打开扩展名(弹出窗口,新窗口,新选项卡)。打开扩展名后,我希望它可以检索保存的值并适当地打开扩展名,但是由于某种原因(例如,从弹出窗口到新选项卡)更改首选项时,单击扩展名图标会以先前的状态打开扩展名。只有在刷新解压缩的扩展程序后,它才能按预期方式打开应用程序。
// Here is the manifest.json...(took out unnecessary info)
{
"manifest_version": 2,
"background": {
"persistent": false,
"scripts": ["extension-starter.js"]
},
"browser_action": {}
}
// Here is the extension-starter.js...
const extPrefer = localStorage.getItem('extensionPreference');
if (extPrefer === null) {
localStorage.setItem('extensionPreference', 'popup');
}
chrome.browserAction.onClicked.addListener(function () {
if (extPrefer === 'window') {
chrome.windows.create({url: chrome.runtime.getURL("index.html"), width: 500, height: 600});
}
else if (extPrefer === 'tab') {
chrome.tabs.create({url:chrome.extension.getURL("index.html")});
}
else {
chrome.browserAction.setPopup({
popup: "index.html"
});
}
})
我希望从本地存储中检索保存的首选项,并以所需的方式打开扩展名。
更新
上述问题是由chrome.browserAction.setPopup({popup: "index.html"});
引起的。一旦执行setPopup
,我将无法更新回窗口或选项卡首选项。似乎setPopup
已在清单上设置,并且在从弹出窗口更改为选项卡或窗口时无法覆盖。
更新的问题:
1.有没有办法做与setPopup
相反的事情?
2. setPopup
是否有另一种方法?
答案 0 :(得分:0)
请尝试一下,告诉我如何进行:
if (localStorage.getItem('extensionPreference') === null) {
localStorage.setItem('extensionPreference', 'popup');
}
chrome.browserAction.onClicked.addListener(function () {
// move this inside the click function
const extPrefer = localStorage.getItem('extensionPreference');
if (extPrefer === 'window') {
chrome.windows.create({ url: chrome.runtime.getURL("index.html"), width: 500, height: 600 });
}
else if (extPrefer === 'tab') {
chrome.tabs.create({ url: chrome.extension.getURL("index.html") });
}
else {
chrome.browserAction.setPopup({
popup: "index.html"
});
}
})
答案 1 :(得分:0)
好的,我知道了!下面,我将解释最终的问题,然后是解决方案。
问题
在后台脚本中,我想允许在localStorage
中保存一个值以确定扩展名是作为弹出窗口,新窗口还是新选项卡打开。窗口和选项卡之间的切换有效,但从弹出窗口切换时除外。如果选择了弹出窗口,则扩展名将作为弹出窗口打开。例如,当切换到新选项卡时,扩展名仍将作为弹出窗口打开。新值仅在重新启动扩展名后才能起作用。问题出在请打鼓:
chrome.browserAction.setPopup({popup: "index.html"});
。
解决方案
我不确定上述问题的确切原因(我不想只是说出可能是错误的或不是100%准确的事情),但是简单的解决方案是执行setPopup
方法在标签上而不是浏览器上。
首先,在chrome.browserAction.onClicked.addListener
方法的回调函数中传入tab
。
chrome.browserAction.onClicked.addListener(function (tab) {
第二,通过执行以下操作,将setPopup
设置为在标签上执行...
chrome.browserAction.setPopup({tabId: tab.id, popup: "index.html"});
以上解决方案就像一个魅力。如果不清楚,请通知我!感谢 JamesWasson 的帮助!