我试图像例如按Ctrl + SHIFT +数一个后热键来获得从网页选定的文本。我从Firefox帮助中的代码开始。如何从活动标签中获取后台脚本中的选定文本(热键后)?
在manifest.json:
{
"description": "Native messaging example extension",
"manifest_version": 2,
"name": "Native messaging example",
"version": "1.0",
"icons": {
"48": "icons/message.svg"
},
"applications": {
"gecko": {
"id": "[email protected]",
"strict_min_version": "50.0"
}
},
"background": {
"scripts": ["background.js"]
},
"commands": {
"toggle-feature": {
"suggested_key": {
"default": "Ctrl+Shift+Y",
"linux": "Ctrl+Shift+0"
},
"description": "Send a 'toggle-feature' event"
}
},
"browser_action": {
"default_icon": "icons/message.svg"
},
"permissions": ["nativeMessaging"]
}
的JavaScript文件:
/*
On startup, connect to the "ping_pong" app.
*/
var port = browser.runtime.connectNative("ping_pong");
/*
Listen for messages from the app.
*/
port.onMessage.addListener((response) => {
console.log("Received: " + response);
});
/*
On a click on the browser action, send the app a message.
*/
browser.browserAction.onClicked.addListener(() => {
console.log("Sending: ping");
port.postMessage("ping");
});
browser.commands.onCommand.addListener(function(command) {
if (command == "toggle-feature") {
console.log("toggling the feature!");
text1 = window.getSelection();
console.log(text1);
}
});
调试器说:
选择{anchorNode:空,anchorOffset:0,focusNode:空, focusOffset:0,isCollapsed:true,rangeCount:0,caretBidiLevel:null }
消息传递作品,热键作品,但我无法获取选定的文本。我需要使用另一种方法吗?我昨天尝试了很多代码,但我没有找到如何去做。有时我会从调试器中看到另一个错误,但我永远无法获取选定的文本。这是一个焦点问题?这太疯狂了!
我从其他加载项读取代码。看来他们使用这种方法,但也许它是在一个弹出窗口?
我在Debian Stretch和Firefox 56上。我在2台电脑上试过。
我建议你阅读[WebExtension的解剖学](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension)页面(也许通过阅读从那里链接的页面来工作)。它具有整体架构信息,可帮助您了解事物的组织/完成情况。您需要使用[内容脚本](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts)与网页进行交互(例如,操纵DOM,听取页面上的点击,获得当前选择等)。 – Makyen
但是,您要做什么来获得选择(即使您已将代码正确放置在内容脚本中)是不够的,您需要使用此答案中包含的更长,更复杂的代码:[获取高亮显示/ Selected text](https://stackoverflow.com/a/5379408)。这是代码片段中的getSelectionText(),而不是第一个版本。 – Makyen
没什么作用,我昨天试了这些功能。我现在重试,但同样的错误。我取消了所有加载项。你给我一个内容脚本的链接,但我需要添加这个?我不明白 – ce6999