后台脚本中的 if/else 不会在扩展点击时执行,而是仅在解压缩的扩展刷新后执行
The if/else in background script does not execute on extension click but only after unpacked extension refresh
我正在尝试加载包含 if/else 语句的后台脚本(扩展名-starter.js)。我在本地存储中存储了用户对如何打开扩展程序(弹出窗口、新 window、新选项卡)的偏好。打开扩展程序后,我希望它能检索保存的值并适当地打开扩展程序,但由于某些原因,在更改首选项时(例如从弹出窗口到新选项卡),单击扩展程序图标会以以前的状态打开扩展程序。只有在我刷新解压的扩展程序后,它才会按预期打开应用程序。
// 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
,我就无法更新回 window 或选项卡首选项。似乎 setPopup
正在清单上设置,并且在将首选项从弹出窗口更改为选项卡或 window 时无法被覆盖。
更新问题:
1、有没有办法做到setPopup
的反话?
2.setPopup
还有其他方法吗?
请试一试,然后告诉我效果如何:
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"
});
}
})
好的,我明白了!下面我将解释最终的问题,然后是解决方案。
问题
在后台脚本中,我想允许 localStorage
中保存的值来确定扩展程序是作为弹出窗口、新 window 还是新选项卡打开。在 window 和选项卡之间切换有效,从弹出窗口切换时除外。如果选择弹出窗口,扩展将作为弹出窗口打开。例如,当切换到新标签时,扩展程序仍会作为弹出窗口打开。新值仅在重新启动扩展后才有效。问题出在,鼓点:
chrome.browserAction.setPopup({popup: "index.html"});
.
解决方案
我不确定上述问题的确切原因(我不想只说一些可能是错误的或不是 100% 准确的事情)但简单的解决方案是执行 setPopup
方法在选项卡上而不是在浏览器上。
首先,在chrome.browserAction.onClicked.addListener
方法的回调函数中传入tab
。
chrome.browserAction.onClicked.addListener(function (tab) {
Second,通过执行以下操作将 setPopup
设置为在选项卡上执行...
chrome.browserAction.setPopup({tabId: tab.id, popup: "index.html"});
以上解决方案非常有效。如果有什么不清楚的,请告诉我!感谢 JamesWasson 的帮助!
我正在尝试加载包含 if/else 语句的后台脚本(扩展名-starter.js)。我在本地存储中存储了用户对如何打开扩展程序(弹出窗口、新 window、新选项卡)的偏好。打开扩展程序后,我希望它能检索保存的值并适当地打开扩展程序,但由于某些原因,在更改首选项时(例如从弹出窗口到新选项卡),单击扩展程序图标会以以前的状态打开扩展程序。只有在我刷新解压的扩展程序后,它才会按预期打开应用程序。
// 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
,我就无法更新回 window 或选项卡首选项。似乎 setPopup
正在清单上设置,并且在将首选项从弹出窗口更改为选项卡或 window 时无法被覆盖。
更新问题:
1、有没有办法做到setPopup
的反话?
2.setPopup
还有其他方法吗?
请试一试,然后告诉我效果如何:
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"
});
}
})
好的,我明白了!下面我将解释最终的问题,然后是解决方案。
问题
在后台脚本中,我想允许 localStorage
中保存的值来确定扩展程序是作为弹出窗口、新 window 还是新选项卡打开。在 window 和选项卡之间切换有效,从弹出窗口切换时除外。如果选择弹出窗口,扩展将作为弹出窗口打开。例如,当切换到新标签时,扩展程序仍会作为弹出窗口打开。新值仅在重新启动扩展后才有效。问题出在,鼓点:
chrome.browserAction.setPopup({popup: "index.html"});
.
解决方案
我不确定上述问题的确切原因(我不想只说一些可能是错误的或不是 100% 准确的事情)但简单的解决方案是执行 setPopup
方法在选项卡上而不是在浏览器上。
首先,在chrome.browserAction.onClicked.addListener
方法的回调函数中传入tab
。
chrome.browserAction.onClicked.addListener(function (tab) {
Second,通过执行以下操作将 setPopup
设置为在选项卡上执行...
chrome.browserAction.setPopup({tabId: tab.id, popup: "index.html"});
以上解决方案非常有效。如果有什么不清楚的,请告诉我!感谢 JamesWasson 的帮助!