Chrome-Erweiterung auf `run_at` `document_start` läuft zu schnell?

EDIT: Etwas falsch war mit meinem Chrome-browser und erstellen einen Konflikt mit meinem Skript, eine komplette Neuinstallation beseitigt, was die Ursache war. Wenn ich passieren, um herauszufinden, was verursacht wurde, werde ich es in hier.

EDIT2: Nur damit jemand der Lektüre dieses im Jahr 2017 wissen, dass ich noch nicht vergessen und ich habe nie dieses problem hatte, da meine vorherigen Bearbeiten.

EDIT3: Es ist 2019 und so weit ich ' ve hatte nie dieses problem wieder.


Habe ich gelernt, wie eine einfache Chrome-Erweiterung, die ein userscript port. Das script funktioniert perfekt mit Tampermonkey mit der Einstellung run at zu document-start alle erforderlichen Ereignisse, die müssen gefangen werden, von Anfang an sind alle gefangen genommen.

Jedoch, wenn ich die gleichen Einstellungen in der Chrome-Erweiterung habe ich entdeckt, dass die gleiche ausgeführte Einstellung ist schneller als Tampermonkey ist, die bewirkt, dass die erste Funktion zu scheitern: ( Uncaught TypeError: Cannot call method 'appendChild' of null. ), da es versucht, fügen Sie ein script-element, um die head Abschnitt, der nicht vorhanden ist, bis 0.010 s später.

My dirty Lösung war bisher die Verwendung einer setInterval - Funktion mit dem timer auf 10 gesetzt, um zu überprüfen, ob document.head vorhanden ist, und fahren Sie dann mit dem code, wenn die Bedingung wahr ist.

Gibt es irgendeine Möglichkeit, dass ich diese Arbeit machen richtig die zimmerreserviereung, ohne das resort zu setInterval oder vielleicht replizieren Tampermonkey ist grant none option, die angezeigt wird ausführen, um das userscript auf der Webseite Kontext?

Folgende ist mein manifest.json-Datei:

{
    "manifest_version": 2,
    "content_scripts": [ {
        "js":        [ "simpleuserscript.user.js" ],
        "matches":   [ "https://www.google.com/*"],
        "run_at":    "document_start"
    } ],
    "converted_from_user_script": true,
    "description":  "Chrome extension",
    "name":         "Testing",
    "version":      "1"
}

All dies könnte vermieden werden, wenn Chrome verabschieden würde den afterscriptexecute Ereignis, aber bis das passiert, ich bin stecken mit der load Veranstaltung. Ich danke im Voraus, jede Hilfe zur Verfügung gestellt.


EDIT: ich habe bereits versucht die Vorschläge in die Antworten: die Verwendung eines anderen run at Punkt, mit DOMContentLoaded und anfügen", um die document.documentElement. Alle waren erfolglos, weil: 1 und 2 lässt das Drehbuch vermissen frühen Ereignissen, und 3 liefert das gleiche TypeError als wenn Sie versuchen, zum Anhängen an document.head.

Das script eingefügt werden/wird ausgeführt, wenn document.readyState = loading sonst wird es miss frühen notwendige Veranstaltungen, aber nicht so früh zu dem Punkt des seins nicht in der Lage Anhängen childs entweder documentElementoder head

Ein Beispiel für den code innerhalb simpleuserscript.user.js:

var script = document.createElement("script");
script.textContent = "console.log('success')";
if(document.head) {
    document.head.appendChild(script);
} else if(document.documentElement) {
    document.documentElement.appendChild(script);
}

Konsole erscheinen TypeError: Cannot call method 'appendChild' of null

InformationsquelleAutor Shadow | 2015-01-28
Schreibe einen Kommentar