我正在为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()
答案 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 });
});