如何从“ window.getSelection”获取字符串以及如何使用“ window.open”修复打开新标签页的问题?

时间:2019-02-13 08:15:08

标签: javascript firefox-addon

我正在为Firefox(我使用版本65)创建扩展程序,该扩展程序旨在在Filmweb网站(相当于IMDB)上搜索电影的标题。可以通过在任何网站上使用选择并将其与Filmweb的搜索边地址结合在一起,然后在新标签上转到该地址来实现。

我尝试使用 document.getSelection 而不是 window.getSelection ,但这没有用。

filmwebExt.js

const contextMenuItem = {
    id: "search-on-Filmweb",
    title: "Search on Filmweb",
    contexts: ["selection"]
};

function getSelectionText() {
    console.log('window.getSelection: ',window.getSelection());
    var text = "true";
    if (window.getSelection()) {
        text = window.getSelection().toString();
        console.log(text); //empty in debbuging console
    } else if (document.selection && document.selection.type !== "Control") {
        text = document.selection.createRange().text;
    }
    console.log(text); //empty in debbuging console
    return text;
}
console.log('second window.getSelection: ',window.getSelection());
browser.contextMenus.create(contextMenuItem);
browser.contextMenus.onClicked.addListener(function (info) {

    const selectedText = getSelectionText();
    const url = 'https://www.filmweb.pl/search?q=';
    const fullUrlAddress = url + selectedText;
    if (info.menuItemId === "search-on-Filmweb") {
        console.log('comparison: ',info.menuItemId === "search-on-Filmweb");
        console.log("selectedText ",selectedText," fullUrlAddress ",fullUrlAddress);
        window.open(fullUrlAddress, '_blank');
    }
});

manifest.json

{
  "manifest_version": 2,
  "name": "Filmweb_Search",
  "version": "1.0",
  "description": "Adds Filmweb search option in context menu",
  "applications": {
    "gecko": {
      "id": "wisznu@gmail.com"
    }
  },
  "background": {
    "scripts": [
      "filmwebExt.js"
    ]
  },
  "icons": {
    "48": "icons/Filmweb_icon48x48.png",
    "96": "icons/Filmweb_icon96x96.png"
  },
  "content_scripts": [
    {
      "matches": [
        "*://*/*"
      ],
      "js": [
        "filmwebExt.js"
      ]
    }
  ],
  "permissions": [
    "tabs",
    "activeTab",
    "<all_urls>",
    "contextMenus"
  ]
}

当前,上下文菜单项正确显示在上下文菜单中,但调试控制台显示 window.getSelection()返回对象中的空值和 window.getSelection的空字符串().toString()

a debugging console log

1 个答案:

答案 0 :(得分:1)

如果Firefox附加组件的基础结构仍与几年前相似,那么这里的问题是您无法从上下文菜单所在的过程访问文档的选择。

我认为正是由于这个原因,添加了info对象,以便您可以在运行代码的过程中获得所需的信息。 对象info具有一个名为selectionText的属性,这就是您必须使用的属性。

要打开新标签页,最好使用标签页API。

因此,总而言之,您的 filmwebExt.js 文件看起来像:

const contextMenuItem = {
  id: "search-on-Filmweb",
  title: "Search on Filmweb",
  contexts: ["selection"]
};

browser.contextMenus.create(contextMenuItem);
browser.contextMenus.onClicked.addListener(info => {
  if (info.menuItemId === "search-on-Filmweb") {
    const url = "https://www.filmweb.pl/search?q=" + info.selectionText;

    browser.tabs.create({ url });
});