Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选择第一次单击浏览器操作时打开的弹出窗口_Javascript_Jquery_Google Chrome_Google Chrome Extension - Fatal编程技术网

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

Javascript 选择第一次单击浏览器操作时打开的弹出窗口,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我开发了一个chrome扩展,将数据上传到我的API 随后是登录页面和数据上传页面。至于这个功能,一切正常 问题是当我第一次单击扩展时,它没有打开。第二次点击它就会打开。当用户单击扩展时,我需要立即打开扩展。我不知道该怎么做 这是我的密码: manifest.json { "content_scripts": [ { "matches": [ "http://*/*", "https://*/*"], "js": [ "js/dataupload.js", "js/sig

我开发了一个chrome扩展,将数据上传到我的API

随后是
登录
页面和
数据上传
页面。至于这个功能,一切正常

问题是当我第一次单击扩展时,它没有打开。第二次点击它就会打开。当用户单击扩展时,我需要立即打开扩展。我不知道该怎么做

这是我的密码:

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");
}

与我们共享一些代码,否则我们不能做太多…事实上,我有我的项目代码,我力写了任何代码打开扩展后立即用户点击。请告诉我我应该共享什么代码首先是你的清单,也许是你的小狗的html/脚本。如果您在后台脚本中使用
chrome.browserAction
方法,您也应该共享其中的一个片段。换句话说:任何关于浏览器操作及其弹出窗口的信息。我已经更新了代码。让我知道这已经足够了,还是我还需要补充一些你说的没问题。但是通过在清单文件中设置默认的弹出窗口,即使在注销之后,upload.html也会显示出来。但是注销后应该显示signin.html。您是如何注销的?条件必须返回false;如果您不是简单地清除
localStorage
keyHey-Xan,请调整它,您所说的非常好。我对你的答案做了一些修改。有了这个编辑,它工作得很好。谢谢Xan。我不喜欢你的编辑:它会导致更频繁的重定向,因为正常状态是登录的。但是你的回答我无法回答我的问题。所以我只是修改了你的代码并进行了测试。它对我来说很好,所以我编辑了它。