2010-12-09 9 views
2

Ich schreibe ein User-JS für Opera. Es reagiert auf eine Anforderung, die keine Erweiterung aufweist, z. /stuff/code/MyFile, oder hat eine nicht mit JavaScript, z. /stuff/code/load.do. Der Inhaltstyp der Antwort wird auf text/html festgelegt, obwohl es reine JavaScript-Quelle (text/javascript) zurückgibt. Da ich keinen Zugriff auf den Servercode habe, muss ich einfach damit leben.Opera User-JS: Wie bekomme ich die rohe Serverantwort?

Das Problem ist jetzt, dass ich die Quelle mit Zeilennummern und so formatieren und es in Opera anzeigen möchte. Daher schrieb ich ein User-JS um auf AfterEvent.DOMContentLoaded zu reagieren (auch ausprobiert AfterEvent.load, selbe Sache). Es liest e.event.target.body.innerHTML, um Zugriff auf den Körper zu erhalten, d. H. Den JavaScript-Code.

Das allein würde gut funktionieren, wenn die Quelle nur HTML-Tags oder Vergleichsoperatoren (<,>) nicht enthalten würde. Da es so ist, bekomme ich nie die Ausgabe, die ich will. Opera scheint eine interne Logik zu haben, die die text/html-Antwort in ein eigenes Darstellungsformat umwandelt. Dies schließt z. eine CRLF, nachdem ein HTML-Tag entfernt wurde oder der Code zwischen zwei "übereinstimmenden" < und> (Vergleichsoperatoren!) zu einer einzelnen Zeile zusammengebrochen wird, wobei ="" nach jedem Wort dort eingegeben wird.

Und das ist, wo das Problem ist.

Wenn ich die gleiche URL ohne mein Benutzer-JS anfordere und dann die Quelle der "Seite" betrachte, sehe ich einen sauberen JavaScript-Code, der identisch ist mit dem, was der Server ausgesendet hat. Und darauf möchte ich zugreifen.

Wenn ich innerText anstelle von innerHTML verwende, streicht Opera die HTML-Tags aus, so dass die Datei sich auch vom Original unterscheidet.

Ich habe auch versucht, outerHTML, outerText und textContent zu betrachten, aber sie haben alle die gleichen Probleme.

Ich weiß, dass Opera hier nichts falsch macht. Der Server sagt, es ist ein text/html und Opera macht einfach, was es normalerweise mit einer text/html-Art der Antwort tut.

Daher ist meine Frage: Gibt es eine Möglichkeit, die unberührte Antwort mit einem Benutzer-JS zu bekommen?

+0

wenn Opera bekam text/javascript (oder anderen Text/* aber nicht text/html) Antwort, es umschließt noch in '

actual text goes here
', und es gibt keine Möglichkeit, zu bestimmen, ob Antwort war text/javascript . –

Antwort

0

Es gibt keine Möglichkeit, auf das zuvor analysierte Markup von JS zuzugreifen. Der einzige Weg dies zu tun wäre, XMLHttpRequest zu verwenden, um den Inhalt selbst anzufordern.

+0

Offensichtlich war dies die Antwort, die ich befürchtete zu hören. Hmm ... – sjngm

+0

Für das Protokoll: Ich wähle dies als die richtige Antwort, aber es löst nicht mein Problem. – sjngm

+0

Verwenden Sie mit Vorsicht, XHR zu location.href ist sehr fragil, Opera hat Probleme mit dem Zwischenspeichern des aktuellen Dokuments (zB: wenn HEAD über XHR zu früh gesendet Opera wird kein Dokument überhaupt anzeigen, oder es kann Ihnen ewig "Anfrage an. .. Komplett") –