Opera User-JS: come faccio a ottenere la risposta del server crudo?
-
10-10-2019 - |
Domanda
Sto scrivendo qualche utente-JS per Opera. Esso reagisce su una richiesta che non ha un'estensione, ad esempio /stuff/code/MyFile
, o è non relative a JavaScript, per esempio /stuff/code/load.do
. Il tipo di contenuto della risposta è impostata su text/html
, anche se restituisce pura sorgente JavaScript (text/javascript
). Come io non ho accesso al codice del server ho semplicemente convivere con questo.
Il problema ora è che voglio formattare la fonte con numeri di riga e tale e visualizzarlo all'interno Opera. Pertanto, ho scritto alcuni user-JS per reagire sul AfterEvent.DOMContentLoaded
(AfterEvent.load
anche provato, la stessa cosa). Si legge e.event.target.body.innerHTML
per ottenere l'accesso al corpo, vale a dire il JavaScript-codice.
Che da sola avrebbe funzionato bene, se solo la fonte non conterrebbe HTML-tag o operatori di confronto (<,>). Dal momento che lo fa, non ho mai ottenere l'output che voglio. Opera sembra avere qualche logica interna per convertire il text/html
-risposta nel proprio formato di rappresentazione. Ciò include che ad esempio un CRLF dopo una HTML-tag viene rimosso o codice tra due "matching" =""
dopo ogni parola in là.
E questo è dove il problema è.
Se io chiedo lo stesso URL senza il mio user-JS e poi guardare il sorgente della pagina "" Vedo un JavaScript-codice pulito identico a quello che il server ha inviato fuori. E questo è quello che voglio ottenere l'accesso.
Se uso innerText
invece di innerHTML
, Opera estrae i tag HTML rendendo il file diverso da quello originale, anche.
Ho anche cercato di guardare al outerHTML
, outerText
e textContent
, ma tutti hanno gli stessi problemi.
So che Opera non fa niente di male qui. Il server dice che è un text/html
e Opera fa semplicemente quello che fa di solito con un text/html
-tipo di risposta.
Quindi, la mia domanda è:? C'è un modo per ottenere la risposta incontaminata, con un utente-JS
Soluzione
Ci non è alcun modo per accedere alla marcatura pre-analizzati da JS. L'unico modo per farlo sarebbe quello di utilizzare XMLHttpRequest per richiedere il contenuto manualmente.