Opera Benutzer-JS: Wie erhalte ich die rohe Server-Antwort?
-
10-10-2019 - |
Frage
Ich schreibe einige Benutzer-JS für Opera. Es reagiert auf eine Anfrage, die eine Erweiterung nicht haben, z.B. /stuff/code/MyFile
oder hat man nicht im Zusammenhang JavaScript, z.B. /stuff/code/load.do
. Der Inhaltstyp der Antwort auf text/html
gesetzt, obwohl es reine JavaScript-Quelle (text/javascript
) zurückgibt. Wie ich ich muss keinen Zugriff auf den Server-Code haben einfach damit leben.
Das Problem ist jetzt, dass ich die Quelle mit Zeilennummern formatieren und so und es in Opera anzuzeigen. Deshalb schrieb ich einige Benutzer-JS auf AfterEvent.DOMContentLoaded
zu reagieren (auch versucht AfterEvent.load
, die gleiche Sache). Es liest e.event.target.body.innerHTML
zu erhalten Zugriff auf den Körper, das heißt der JavaScript-Code.
Das allein gut funktionieren würde, wenn nur die Quelle nicht HTML-Tags oder Vergleichsoperator enthalten würde (<,>). Da es der Fall ist, bekomme ich nie die Ausgabe ich will. Opera scheint eine gewisse innere Logik zu haben, die text/html
-Antwort in sein eigenen Darstellungsformat zu konvertieren. Dies beinhaltet, dass z.B. ein CRLF nach einer HTML-Tag entfernt oder Code zwischen zwei „matching“ =""
nach jedem Wort drin.
Und das ist, wo das Problem ist.
Wenn ich die gleiche URL anfordern, ohne mein Benutzer-JS und dann an der Quelle der „Seite“ sehe ich sehe einen sauberen JavaScript-Code identisch zu dem, was der Server gesendet. Und das ist, was ich will, um Zugang zu erhalten.
Wenn ich innerText
statt innerHTML
verwenden, Opera abstreift die HTML-Tags, um die Datei anders als das Original zu machen, auch.
Ich habe auch versucht bei outerHTML
, outerText
und textContent
zu sehen, aber sie alle haben die gleichen Probleme.
Ich weiß, dass Opera nichts falsch macht hier. Der Server sagt, es ist ein text/html
und Opera einfach tut, was es in der Regel mit einer text/html
-Art von Reaktion des Fall ist.
Daher meine Frage ist: Gibt es eine Möglichkeit die unberührte Reaktion mit einem Benutzer-JS
zu bekommenLösung
Es gibt keine Möglichkeit, die vorge analysiert Markup von JS zuzugreifen. Der einzige Weg, dies zu tun wäre, um XMLHttpRequest zu verwenden, um den Inhalt selbst zu beantragen.