【问题标题】:Open extension popup when click on context menu单击上下文菜单时打开扩展弹出窗口
【发布时间】:2016-01-26 11:52:34
【问题描述】:

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

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


    };

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

【问题讨论】:

    标签: google-chrome google-chrome-extension


    【解决方案1】:

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

    你想要的是这样的:

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

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

    【讨论】:

    • 谢谢,但我必须打开我在 manifest.json 中设置的 default_popup 页面
    【解决方案2】:

    很遗憾,无法做到。

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

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

    这是source

    【讨论】:

    • Chrome 菜单项点击是用户操作
    【解决方案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
          });
      });
    

    这只是一种解决方法。希望对您有所帮助。

    【讨论】:

      【解决方案4】:

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

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-03
        • 1970-01-01
        相关资源
        最近更新 更多