【问题标题】:Opening chrome extension in new tab when toolbar icon is clicked单击工具栏图标时在新选项卡中打开 chrome 扩展
【发布时间】:2018-05-30 05:21:20
【问题描述】:

我希望扩展 HTML 在新选项卡中而不是在弹出窗口中打开。现有扩展 Session Buddy 具有我希望复制的确切行为。

问题是,当我单击工具栏图标后,Chrome 会不停地打开新的扩展选项卡,而所需的行为是(显然)只打开一个选项卡。奇怪的是,当我使用诸如https://stackoverflow.com/ 之类的“Web URL”时,我只能打开一个标签页。

manifest.json:

{
    "manifest_version": 2,
    "name": "angular chrome extension boilerplate",
    "version": "1.0.0",
    "background": {
        "scripts": ["background.js"],
        "persistent": true
    },
    "permissions": [
        "activeTab",
        "tabs",
        "background"
    ],
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
}

background.js:

chrome.tabs.create({ url: chrome.extension.getURL('index.html') });

这个网站上的几个帖子有一个类似的问题,但没有一个建议的解决方案对我有用:

【问题讨论】:

  • 把它放在图标的点击监听器中:sample.
  • 如果我将chrome.tabs.create() 放在点击监听器中,标签不会打开。

标签: google-chrome-extension


【解决方案1】:

事实证明,在单击工具栏图标时打开选项卡的正确方法是将对 chrome.tabs.create() 的调用包装在 onClicked 侦听器中:

修改background.js:

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.create({ url: chrome.extension.getURL('index.html'), selected: true });
});

由于chrome.browserAction.onClickedundefined,最初这将不起作用。为了解决这个问题,one needs to add an empty "browser_action" object to manifest.json。此外,之前使用的持久化背景和activeTab 权限是不必要的,可以删除:

修改manifest.json:

{
    "manifest_version": 2,
    "name": "angular chrome extension boilerplate",
    "version": "1.0.0",
    "browser_action": { },
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "permissions": [
        "tabs",
        "background"
    ],
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
}

【讨论】:

  • 这工作正常,但在后续点击时会打开多个标签。我怎样才能防止这种情况发生?
猜你喜欢
  • 2012-12-26
  • 2011-01-25
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
相关资源
最近更新 更多