单击上下文菜单时打开扩展弹出窗口

时间:2015-10-27 07:02:09

标签: google-chrome google-chrome-extension

我必须做一个扩展,当在上下文菜单中单击文本时,在回调中打开扩展菜单弹出窗口。

chrome.runtime.onInstalled.addListener(function() {
  var context = "selection";
  var title = "Google for Selected Text";
  var id = chrome.contextMenus.create({"title": title, "contexts":["selection"],
                                         "id": "context" + context});  
});

// add click event
chrome.contextMenus.onClicked.addListener(onClickHandler);

// The onClicked callback function.
function onClickHandler(info, tab) {
  var sText = info.selectionText;
  var url = "https://www.google.com/search?q=" + encodeURIComponent(sText);  


    //what i have put here to open extension popup


    };

在这种情况下,当我点击菜单时,我会使用此搜索打开一个新标签。

4 个答案:

答案 0 :(得分:3)

无法以编程方式打开默认浏览器操作弹出窗口。解决方法是使用内容脚本打开模态或灯箱并显示弹出窗口的内容。

另一种方法是 - 在上下文菜单项的clickhandler中,创建一个新选项卡并使其处于非活动状态,然后将该选项卡传递给chrome.windows.create api以创建一个新的弹出窗口。

    chrome.tabs.create({
      url: chrome.extension.getURL('popup.html'),
      active: false
  }, function(tab) {
      // After the tab has been created, open a window to inject the tab
      chrome.windows.create({
          tabId: tab.id,
          type: 'popup',
          focused: true
      });
  });

这只是一个解决方法。希望它有所帮助。

答案 1 :(得分:2)

不幸的是,它无法完成。

Chrome API未提供以编程方式打开扩展程序弹出窗口的方法。 Chromium团队拒绝了对此类选项的功能请求,并解释说:

  

浏览器和页面操作弹出窗口的理念是它们必须是   由用户操作触发。

这是source

答案 2 :(得分:1)

您可以使用chrome.window API(documentation here)。

你想要的是这样的:

chrome.windows.create({
    url : "http://yourPopupUrl.com"
    focused : true
    type : "popup"});

这将在弹出模式下打开一个新窗口(没有顶部菜单栏)并加载“http://yourPopupUrl.com”。

答案 3 :(得分:0)

现在可以从处理程序内部以编程方式打开浏览器操作弹出窗口,以进行用户操作。

browser.menus.create({
  id: "open-popup",
  title: "open popup",
  contexts: ["all"]
});

browser.menus.onClicked.addListener(() => {
  browser.browserAction.openPopup();
});

您可以详细了解here

编辑:

此功能仅在Firefox 57及更高版本中可用。在Chrome中,仅在开发人员通道中可用。

来源:chrome/common/extensions/api/_api_features.json - chromium/src - Git at Google