Warum funktioniert document.addEventListener ('load', function) nicht in einem Skript?
Es nicht geben einen Fehler aus, und ich habe eine console.log('loaded userscript wifi-autologin')
die console.log
funktioniert, aber die beabsichtigte Wirkung des Dokuments.die Methode addEventListener nicht passieren. Nachdem ich ein bisschen mehr Debuggen, so dass es zu drucken, der die Methode addEventListener aufgerufen wurde, entdeckte ich, dass es nicht aufgerufen wird.
Quelle Skript:
//==UserScript==
//@name wifi-autologin
//@namespace lf-ns
//@description Hopefully autologins to a captive portal
//@include *://1.1.1.1/*
//@version 1
//@run-at document-end
//==/UserScript==
document.addEventListener('load', submitAction);
InformationsquelleAutor der Frage Yet Another User | 2013-05-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Offenbar
document.addEventListener()
ist unzuverlässig, und daher mein Fehler. Verwendenwindow.addEventListener()
mit den gleichen Parametern, statt.InformationsquelleAutor der Antwort Yet Another User
Das problem ist WENN das Ereignis Hinzugefügt und AUSGEFÜHRT über Auslösung
(die
document
onload
Eigenschaft änderung kann überprüft werden, durch untersuchen der Eigenschaften-Liste).Wann wird diese ausführen und ändern
onload
relativ zu deronload
event-trigger:vor, während oder nach der Belastung und/oder-Darstellung von der Seite HTML?
Diese einfache scURIple (cut & paste URL) "Werke" w/o
alert
ing als naiv erwartet:Nicht laden implizieren Inhalt Skript ausgeführt worden?
Sich ein wenig aus dieser Welt expansion ...
Betrachten Sie eine leichte Modifikation:
ist und ob das HTML geladen wurde oder nicht.
Rendering ist sicherlich anhängig seit
goodbye universe - hello muiltiverse
ist nicht auf dem Bildschirm gesehen, aber nicht dieconfirm( ... )
werden bereits geladen, um ausgeführt zu werden? ... und sodocument.addEventListener('load', ... )
... ?In anderen Worten, können Sie code ausführen, um zu überprüfen, für sich selbst laden, wenn der code selbst noch nicht geladen ist?
Oder, eine andere Sichtweise auf die situation, wenn der code ausführbar ist und ausgeführt dann hat es BEREITS geladen wurden, als getan-deal und nachträglich zu überprüfen, wenn der übergang ist zwischen noch nicht geladen und geladen ist a priori fait accompli.
Also, was zuerst kommt: das laden und ausführen von code oder mit den Codes, die die Funktionalität aber nicht geladen?
onload
alswindow
Eigenschaft funktioniert, weil es untergeordnet ist, um das Objekt und nicht sich selbst-referentiellen als in derdocument
Fall, dh. es ist diewindow
's Inhalt, überdocument
bestimmen die Fangfrage err situation.PS.: Wenn Sie die folgenden fehl
alert(...)
? (persönlich erlebt gotcha):Einschränkung: es sei denn, das laden in das gleiche Fenster ist wirklich schnell ... Stress ist an der Tagesordnung
also, was wirklich gebraucht wird unten bei der Verwendung des gleichen namens Fenster:
alternativ gehen Sie jede aufeinander folgende
window.open
mit:alert("press Ok either after # alert shows pending load is done or inspired via divine intervention" );
welche betonen
onload
Unterschiede alsdocument
oderwindow
Eigenschaft.Eine andere Einschränkung betrifft die Erhaltung XSS, Cross-Site-Scripting-und SOP, same-Origin-Policy Regeln, die erlauben können das laden einer HTML-URI, aber nicht ändern Sie den Inhalt zu prüfen, für die gleiche. Wenn ein scURIple wird als ein bookmarklet/Scriptlet aus dem gleichen Ursprung/Website, dann gibt es vielleicht Erfolg.
ie. Von einer beliebigen Seite, dieser link wird dem laden aber wahrscheinlich nicht tun
alert('done')
:aber wenn der link mit Lesezeichen versehen und dann klicken, wenn die Anzeige eines
google.ca
Seite, es macht beides.Testumgebung:
InformationsquelleAutor der Antwort ekim
dies geschah wieder um Letzte Quartal 2017 . greasemonkey feuern zu spät . nach dem domcontentloaded-event schon gefeuert worden.
was zu tun ist:
@run-at document-start
anstelle des Dokument-Endeaus : https://github.com/greasemonkey/greasemonkey/issues/2769
InformationsquelleAutor der Antwort blackholeearth0_gmail