Google chrome extension 弹出窗口赢得';第一次单击时不会显示
我试图在用户单击图标时显示弹出窗口。只有当url不包含“chrome://”或“about:”时,才会显示弹出窗口。这很有效。但在普通页面上,只有当我第二次点击图标时,弹出窗口才会出现。第一次单击时不会发生任何事情。下面是from background.html的代码Google chrome extension 弹出窗口赢得';第一次单击时不会显示,google-chrome-extension,Google Chrome Extension,我试图在用户单击图标时显示弹出窗口。只有当url不包含“chrome://”或“about:”时,才会显示弹出窗口。这很有效。但在普通页面上,只有当我第二次点击图标时,弹出窗口才会出现。第一次单击时不会发生任何事情。下面是from background.html的代码 // Called when the user clicks on the browser action. chrome.browserAction.onClicked.addListener(function(tab) {
// Called when the user clicks on the browser action.
chrome.browserAction.onClicked.addListener(function(tab) {
if (!tab.url.indexOf('chrome://') ||!tab.url.indexOf('about:')) {
alert('For security reasons, this page cannot shared.');
return;
}
else {
chrome.browserAction.setPopup({tabId:tab.id,popup:"html/popup.html"});
}
});
chrome.browserAction.onClicked.addListener(function (tab) {
console.log("Is fired..");
chrome.browserAction.setPopup({
popup: "popup.html"
});
});
我做错了什么?在正确复制了您的问题后,我发现了问题所在:第一次单击时没有显示弹出窗口的原因是因为没有弹出窗口可显示。 想想看。单击浏览器图标后,您将设置弹出窗口。应该展示什么?它不知道,但事件已经触发,因此默认机制不知道显示什么。在您的事件处理程序中,这只是一个javascript机制,没有内置在浏览器中,然后您可以设置它,但是已经很晚了。但是,第二次(以及第三次、第四次等)将实际显示一个弹出窗口,因为现在它知道要显示哪个弹出窗口 解决方案?显而易见的一点是将弹出窗口作为manifest.json的一部分,与其他人一样:
"browser_action": {
"default_icon": "icons/icon19.png",
"default_title": "browser action demo",
"default_popup": "src/browser_action/browser_action.html"
},
当然,这样做意味着不会触发chrome.browserAction.onClicked,但公平地说,您应该给用户一个登录弹出窗口。如果您想在之后尝试弹出窗口,那么提供一个这样做的界面(单击按钮会向背景页面发送消息以更改弹出窗口)
另一种选择可能是在显示弹出窗口之前有一个处理程序
,但我不会放弃我的希望,因为我在API中还没有找到类似的处理程序。似乎您正在将两个互斥事件混合到一个功能中
当没有使用弹出窗口时,将使用chrome.browserAction.onClicked
以下脚本仅在background.html中执行一次
// Called when the user clicks on the browser action.
chrome.browserAction.onClicked.addListener(function(tab) {
if (!tab.url.indexOf('chrome://') ||!tab.url.indexOf('about:')) {
alert('For security reasons, this page cannot shared.');
return;
}
else {
chrome.browserAction.setPopup({tabId:tab.id,popup:"html/popup.html"});
}
});
chrome.browserAction.onClicked.addListener(function (tab) {
console.log("Is fired..");
chrome.browserAction.setPopup({
popup: "popup.html"
});
});
如果您想更改某些任意逻辑(例如某些url或内容)上的弹出页面,请将其放在每个选项卡Id的背景页面中。顺便问一下,您要查找的业务逻辑是什么?您可以尝试检查
选项卡的状态是否为“完成”
?可能是在页面正确加载之前无法显示。无论页面是否完全加载,只有在第二次单击时才会显示弹出窗口。@vivek你知道了吗??也一样requirement@williamsowen我不记得我是否能解决这个问题。