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

4

我需要创建一个扩展程序,当在右键菜单中点击文本时,在回调函数中打开扩展程序菜单弹窗。

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个回答

6

无法通过程序打开默认的浏览器操作弹出窗口。一个解决方法是使用内容脚本打开模态框或灯箱并展示你的弹出窗口内容。

另一个方法是,在右键菜单项的点击处理程序中创建一个新标签页并将其设置为非活动状态,然后将该标签页传递给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
      });
  });

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


3

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

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

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

您可以在这里阅读更多关于它的信息。

编辑:

此功能仅适用于Firefox 57及以上版本。在Chrome中,该功能仅在开发通道中提供。

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


2

很遗憾,这是无法完成的。

Chrome API没有提供以编程方式打开扩展弹出窗口的方法。Chromium团队拒绝了这样一个选项的功能请求,并解释道:

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

这里是源代码


4
Chrome 菜单项的点击是用户的操作。 - Tom

1
您可以使用chrome.window API(此处的文档)。
您需要的是这样的东西:
chrome.windows.create({
    url : "http://yourPopupUrl.com"
    focused : true
    type : "popup"});

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

谢谢,但我必须打开我在manifest.json中设置的默认弹出页面。 - Pedram marandi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接