Google chrome extension 弹出窗口赢得';第一次单击时不会显示

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) {

我试图在用户单击图标时显示弹出窗口。只有当url不包含“chrome://”或“about:”时,才会显示弹出窗口。这很有效。但在普通页面上,只有当我第二次点击图标时,弹出窗口才会出现。第一次单击时不会发生任何事情。下面是from 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"
    });

});

我做错了什么?

在正确复制了您的问题后,我发现了问题所在:第一次单击时没有显示弹出窗口的原因是因为没有弹出窗口可显示。

想想看。单击浏览器图标后,您将设置弹出窗口。应该展示什么?它不知道,但事件已经触发,因此默认机制不知道显示什么。在您的事件处理程序中,这只是一个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我不记得我是否能解决这个问题。