innerHTML abfragen (Add-on Builder)

  • Bemerkung zum Add-on Builder. Die Login-Seite ist https://builder.addons.mozilla.org/user/private_addons/

    Hallo,

    der nachfolgende Code fügt dem Firefox "Rechte-Maustaste-Menu" den Menupunkt mit dem Label
    "innerHTML in die Konsole einfügen" hinzu. Wenn man auf den Menupunkt klickt, soll der innerHTML
    der aktuellen Internetseite in die Error-Console geschrieben werden.

    Aber leider erscheint in der Add-on Builder Error-Konsole
    (die Error-Konsole ist oben im "Add-on Builder Editor" der fünfte Knopf von links)
    die Fehlermeldung "ReferenceError: document is not defined".

    Wie kommt man an die Information zu "innerHTML" heran?

    main.js :

    Code
    var cm = require('context-menu');
            cm.Item({
                label: "innerHTML in die Konsole",
                contentScript: 'self.on("click", self.postMessage);',
                onMessage: function () {
                tabs = require('tabs');
                //console.log(tabs.activeTab.url); //funktioniert einwandfrei
                console.log(document.body.innerHTML); //funktioniert nicht (Fehlermeldung: ReferenceError...)
            }
            });
  • Das ist doch das exakt selbe Problem wie in deinem letzten Thread. Dort war es bereits nicht möglich, direkt auf document zuzugreifen, nach ein paar Tagen ist es das immer noch nicht. Du musst die vorhandenen APIs nutzen! Das steht übrigens alles in der Dokumentation, folgender Code-Schnipsel hat inklusive Nachschlagen, hinschreiben und Testen maximal drei Minuten gedauert:

    Code
    tabs.activeTab.attach({
       contentScript: 'console.log(document.body.innerHTML)'
    });

    Nachtrag: Falls du eine kurze Erklärung dazu möchtest: Über die Eigenschaft activeTab kommst du an Informationen zum aktuell ausgewählten Tab. Die Methode attach führt auf diesem Tab einen Page-Mod aus, das ist eine weitere API, welche es dir erlaubt, im Kontext einer Webseite Scripts über die contentScript-Option auszuführen. Über diesen Weg hast du selbstverständlich auch Zugriff auf document.

  • Das in der Grafik (siehe unten) ROT unterstrichene Script, was man übergibt, muss ein "einzeiliger String" sein, d.h
    es dürfen keine "Enter" darin vorkommen. Manchmal müssen aber JavaScript-Programmierer lange Scripts
    schreiben (z.B > 20 Zeilen), und wenn man so ein langes Script als "Einzeiler" übergibt, wird es etwas unübersichtlich.

    -Gibt es eine Programmier-Möglichkeit oder Programmiertechnik, als "anzuhängendes Script" (hier: contentScript) ein
    normales Javascript zu übergeben, was auch "Enter" und "Spaces" beinhalten darf? [attachment=0]console_log2.gif[/attachment]

  • Was heißt "normales JavaScript"? Du darfst in JavaScript nicht mitten in einem Literal einen Zeilenumbruch machen, da muss man sich dann eben der Konkatenation bedienen (+ -Operator). Oder man bindet gleich eine ganze JS-Datei ein. Auf die Dokumentation wurdest du ja bereits mehr als einmal verwiesen, contentScriptFile heißt hier das Zauberwort.