So hat das Addon den ausgewählten Text in einem Fenster zu erhalten:
Das Addon kann nicht direkt auf das Fenster oder Tab manipulieren. Ich meine, es Details über sie erhalten können - wie Liste aller Registerkarten aktiv, eine Registerkarte öffnen, konzentrieren bekommen usw.
- Bringen Sie einen contentScript
Aber um wirklich zu arbeiten auf einem niedrigeren Niveau als "Abrufen des ausgewählten Textes" Firefox SDK bietet "Content Scripts". Sie müssen an die Zielregisterkarte angehängt werden. Wir können den Inhalt Script "someScript.js" auf zwei Arten befestigen:
Sie direkt anschließen tabs API verwenden, können:
var tabs = require("sdk/tabs");
tabs.on('activate', function(tab) {
var worker = tab.attach({
contentScriptFile: data.url("someScript.js")
});
});
oder Sie können PageMod verwenden:
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "*.mozilla.org",
contentScriptFile: data.url("someScript.js")
});
Es ist in der Tat ein Unterschied zwischen der Verwendung von Tabs API und PageMod API:
Tabs API: Sie entscheiden, auf welcher Registerkarte das ContentScript angehängt ist verschiedene Kriterien (welche Registerkarte, welchen Status usw.).
PageMod API: Wird an alle Seiten mit einem passenden URL-Muster angehängt.
Jetzt verhält sich das angehängte contentScript wie ein Teil der Seite, an die es angehängt ist.
- Zeug Sie mit someScript.js:
In diesem Fall den markierten Text durch Doppelklick erhalten:
//someScript.js
document.addEventListener('dblclick', function(){
var selObj = window.getSelection();
oRange = selObj.getRangeAt(0);
var selectedText = selObj.toString();
console.log(selectedText);
}, false);
- Kommunikation zwischen contentScript und main.js (Add-on):
Wie Sie die contentScript nur sehen druckt den ausgewählten Text in die Konsole. Um dasselbe mit dem Addon oder main.js oder index.js zu kommunizieren, müssen wir make use of the "port" object.
Tabs API:
var tabs = require("sdk/tabs");
tabs.on('activate', function(tab) {
var worker = tab.attach({
contentScriptFile: data.url("someScript.js")
});
//Keep listening on the port named "selectedText" from someScript.js
worker.port.on("selectedText", function(sText) {
console.log(sText);
});
});
PageMod API:
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "*.mozilla.org",
contentScriptFile: data.url("someScript.js"),
//Keep listening on the port named "selectedText" from someScript.js
onAttach: function(worker) {
worker.port.on("selectedText", function(sText) {
console.log(sText);
});
}
});
senden Nachrichten von contentScript zu main.js:
//someScript.js
document.addEventListener('dblclick', function(){
var selObj = window.getSelection();
oRange = selObj.getRangeAt(0);
var selectedText = selObj.toString();
console.log(selectedText);
//emit the selected text on port named "selectedText"
self.port.emit("selectedText", selectedText);
}, false);
Sie zwischen index.js und Webseite .siehe kommunizieren können [Kommunikation mit anderen Skripten] (https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/Communicating_With_Other_Scr Schriften). Siehe auch Sie können es ohne Addon-Auswahlmethode http://stackoverflow.com/questions/5379120/get-the-highlighted-selected-text tun –