【问题标题】:Google chrome extension to open the New Tab page谷歌浏览器扩展打开新标签页
【发布时间】:2016-08-15 15:12:42
【问题描述】:

我正在尝试制作一个简单的 chrome 扩展。 它应该在“Windows 系统托盘 chrome 图标上下文菜单”中添加一个“打开新标签”项(类似于 checker plus 的 gmail 扩展程序所做的工作;请参见下面给出的第二张图片)。

当我单击该选项时,chrome 应该 (检查是否打开了任何窗口。如果是,那么应该)打开一个新标签页。如果没有打开任何窗口,则应该打开一个新的 chrome 窗口并显示新的标签页。

到目前为止我做了什么:

manifest.json

{  
  "manifest_version": 2,

  "name": "Open New Tab",  
  "description": "This extension open a new tab page",  
  "version": "1.0",  
  "browser_action": {  
      "default_icon": "icon.png"
  },  
  "background":{  
    "scripts":["background.js"],  
    "persistent": false
  },  
  "permissions": [
    "background",
    "activeTab"
  ]
}

background.js

chrome.browserAction.onClicked.addListener(function(tab)   
{  
    chrome.tabs.create({ url: "chrome://newtab" });  
}
);

background.html

<html>
<head>
<script>
chrome.browserAction.onClicked.addListener(function(window)                         
{  
    chrome.windows.create({url: "chrome://newtab", type: "normal"});  
}
);
</script>
</head>
</html>

我已经加载了这个扩展。 到目前为止,我的扩展对 chrome 的影响:
1) Chrome 窗口已经打开。 我的图标显示在扩展列表中并且可以点击。
单击时,会在同一窗口中打开一个“新标签”页面。这是对的。 (虽然我不需要这个。现在,顺其自然吧。)

2) Chrome 窗口关闭,允许 chrome 在后台运行。右键单击镀铬托盘图标。我的扩展菜单“打开一个新标签”显示在菜单中。
这也是正确的。单击它时,会创建一个新的 chrome 窗口。 (目前,我还没有检查窗口是否已经存在。那是稍后。)。

问题在于,在打开的新窗口中,chrome 会自动打开“chrome://extensions”网址,而不是“新标签”页面。这是错误的,我无法理解扩展页面打开的原因。我想打开新标签页,并且我正在传递“chrome://newtab”URL。如何让 chrome 从这里打开新标签页?当我从桌面图标或 Windows 开始菜单启动 Chrome 时,它​​可以正常工作。所以,问题似乎与我的代码有关。

感谢任何帮助。

【问题讨论】:

  • 您似乎将扩展程序图标与浏览器操作混合在一起,照片中的“打开新标签”不是浏览器操作,当您单击“打开新标签”时,实际上是浏览器启动而不是您的@987654328 @ 被执行。
  • 我是这么想的。我的意思是'browser_action'本身意味着你需要一个浏览器窗口来点击某些东西......我想要的是打开chrome窗口并在我点击上下文菜单时显示“新标签”页面,如第二张图片所示.如果 Chrome 已经打开,我可以使用标签右侧的方形按钮打开新标签页,所以我不需要浏览器操作。但是如何在清单中为“SYS_TRAY_ICON_CLICK...something”事件指定操作?
  • 如何监听chrome.windows.onCreated事件,当它被触发时会创建一个新窗口,然后你可以调用chrome.tabs.create来创建一个新标签。
  • 嗯...这是一个想法...我会尝试并报告。
  • @Haibara Ai 谢谢你的想法。最后我让它工作了。 chrome.windows.onCreated.addListener(function(tab) { chrome.tabs.update(null, { url: "chrome://newtab" }); });

标签: javascript jquery google-chrome google-chrome-extension


【解决方案1】:

监听chrome.windows.onCreated事件,当右键单击chrome托盘图标时,将启动一个新窗口,然后您可以在事件处理程序中创建一个新选项卡。

chrome.windows.onCreated.addListener(function(window) {
    chrome.windows.getAll(function(windows) {
        if (windows.length === 1) {           
            chrome.tabs.create({windowId: window.id, url: "chrome://newtab"});
        }
    });
});

【讨论】:

  • 现在,我希望它只工作一次,也就是说,当没有打开窗口(最大化或最小化)并且 chrome 在后台运行并且它的系统托盘图标可见时。我右键单击该图标,然后选择我的菜单。新窗口弹出。到这里为止一切都很好,
  • 但不知何故,它也会干扰其他网页和网站。例如,我使用 Feedly.com 作为我的主要新闻阅读器。当我打开 Feedly 时,它要求我登录。登录页面作为新窗口/选项卡打开。这个新窗口/选项卡创建事件也被我的扩展程序捕获,它将 feedly 登录页面转换为 NewTab 页面!!!那么,如何限制我的扩展仅在没有 chrome 窗口时工作?我应该将此作为一个新问题提出吗?
  • @PRinCEKtd,看看developer.chrome.com/extensions/windows#method-getAll,您可以在创建新标签之前获取窗口计数并进行检查。
  • 感谢您的链接。
猜你喜欢
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 2017-11-06
  • 2014-07-26
  • 2013-08-05
  • 1970-01-01
相关资源
最近更新 更多