我試圖像例如按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