选择首次单击浏览器操作时打开的弹出窗口

Select which popup opens on a first click on a browser action

本文关键字:窗口 单击 浏览器 操作 选择      更新时间:2023-09-26

我开发了一个Chrome扩展程序,可以将数据上传到我的API。

它紧随其后的是signin页和data-upload页。至于此功能,一切正常。

问题是当我第一次单击扩展程序时,它无法打开。并在第二次单击它时打开。我需要在用户单击扩展程序时立即打开我的扩展程序。我不知道该怎么做。

这是我的代码:

manifest.json

{
  "content_scripts": [
  {
    "matches": [ "http://*/*", "https://*/*"],
    "js": [ "js/dataupload.js", "js/signin.js" ]
    }
  ],
  "name": "upload",
  "version": "1.1",
  "manifest_version": 2,
  "description": "Quick access to upload data",
  "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'",
  "permissions": [
    "http://*/*",
    "https://*/*",
    "https://myapi.com/*",
    "https://ajax.googleapis.com/*",
    "management",
    "tabs"
    ],
  "icons": {
    "128": "images/icon.png"
  },
  "background": {
    "scripts": ["js/background.js"]
  },
  "browser_action": {
    "default_title": "Upload APP",
    "default_icon": "images/icon.png"
  },
  "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
}

background.js

chrome.browserAction.onClicked.addListener(function(tab) {
    if (window.localStorage.getItem('user_api_key')) {
        chrome.browserAction.setPopup({popup: "upload.html"});
    }
    else{
        chrome.browserAction.setPopup({popup: "signin.html"});
    }
});

代码按预期工作。第一次点击被设置下一次点击发生的情况的chrome.browserAction.onClicked捕获。

很快就会有chrome.browserAction.openPopup函数形式的直接解决方案,但它还没有稳定版。

因此,现在您必须重新组织逻辑,因为如果单击时没有立即发生,则无法打开弹出窗口。您应该在清单中将upload.html设置为默认弹出窗口,然后在upload.html内部检查条件并根据需要重定向。请注意,localStorage在背景和弹出窗口之间共享。

因此,清单:

  "browser_action": {
    "default_title": "Upload APP",
    "default_icon": "images/icon.png",
    "default_popup": "upload.html"
  },

upload.html的代码:

if (!window.localStorage.getItem('user_api_key')) {
    window.location = chrome.runtime.getURL("signin.html");
}