2010-12-09 23 views
2

J'écris un user-JS pour Opera. Il réagit à une demande qui n'a pas d'extension, par ex. /stuff/code/MyFile, ou en a une qui n'est pas liée à JavaScript, par ex. /stuff/code/load.do. Le type de contenu de la réponse est défini sur text/html, même s'il renvoie une source JavaScript pure (text/javascript). Comme je n'ai pas accès au code du serveur, je dois simplement vivre avec ça.Opera User-JS: comment obtenir la réponse du serveur brut?

Le problème est maintenant que je veux formater la source avec des numéros de ligne et autres et l'afficher dans Opera. Par conséquent, j'ai écrit un utilisateur-JS pour réagir sur AfterEvent.DOMContentLoaded (également essayé AfterEvent.load, même chose). Il lit e.event.target.body.innerHTML pour accéder au corps, c'est-à-dire le code JavaScript.

Cela seul fonctionnerait bien, si seulement la source ne contiendrait pas de balises HTML ou d'opérateurs de comparaison (<,>). Comme c'est le cas, je n'ai jamais la sortie que je veux. Opera semble avoir une logique interne pour convertir la réponse text/html en son propre format de représentation. Cela inclut par exemple un CRLF après un HTML-tag est enlevé ou du code entre deux "correspondants" < et> (opérateurs de comparaison!) sont croqués ensemble dans une seule ligne en appliquant ="" après chaque mot là-bas.

Et c'est là que le problème est.

Si je demande la même URL sans mon utilisateur JS, puis regarder la source de la "page", je vois un code JavaScript propre identique à ce que le serveur a envoyé. Et c'est ce que je veux avoir accès.

Si j'utilise innerText au lieu de innerHTML, Opera supprime également les balises HTML qui rendent le fichier différent de l'original. J'ai également essayé de regarder outerHTML, outerText et textContent, mais ils ont tous les mêmes problèmes.

Je sais qu'Opera ne fait rien de mal ici. Le serveur dit que c'est un text/html et Opera fait simplement ce qu'il fait d'habitude avec un text/html -kind de réponse. Par conséquent, ma question est: est-il possible d'obtenir la réponse intacte avec un utilisateur-JS?

+0

quand Opera a text/javascript (ou tout autre texte/* mais pas text/html) réponse, il renferme encore '

actual text goes here
', et il n'y a aucun moyen de déterminer si la réponse était text/javascript . –

Répondre

0

Il n'existe aucun moyen d'accéder au balisage pré-analysé à partir de JS. La seule façon de le faire serait d'utiliser XMLHttpRequest pour demander le contenu vous-même.

+0

De toute évidence, c'était la réponse que je craignais d'entendre. Hmm ... – sjngm

+0

Pour le protocole: Je choisis ceci comme bonne réponse, mais cela ne résout pas mon problème. – sjngm

+0

à utiliser avec précaution, XHR à location.href est très fragile, Opera a des problèmes avec la mise en cache du document courant (ex: si HEAD via XHR envoyé trop tôt Opera n'affichera pas de document du tout, ou pourra vous présenter éternellement "request to. .. Achevée") –