2009-04-22 10 views
5

Sto provando a scrivere un bookmarklet per aiutare alcuni tester del QA a inviare utili informazioni di debug quando incontrano problemi. Attualmente posso impostare window.location su un URL che fornisce queste informazioni di debug, ma questa risorsa è un documento XML con una direttiva di elaborazione xml-stylesheet.C'è un modo per i browser ignorare o sovrascrivere le istruzioni di elaborazione del foglio di stile xml?

In realtà sarebbe più comodo se i tester fossero in grado di visualizzare i dati XML non elaborati come testo normale o il rendering XML predefinito per IE e Firefox.

Qualcuno conosce un modo per disabilitare o sovrascrivere le direttive xml-stylesheet fornite all'interno di un documento XML, utilizzando Internet Explorer o Firefox?

Modifica: ho aperto una taglia su questa domanda. Requisiti: solo

  • codice lato client, senza intervento da parte dell'utente ammessi
  • soluzioni sia per IE e Firefox necessarie (possono essere soluzioni diverse)
  • Disabilitare l'elaborazione foglio di stile e renderlo come testo è accettabile
  • Overriding elaborazione di stile con un XSL personalizzato è accettabile
  • rendering XML con il foglio di stile browser predefinito XML è accettabile

risposta

3

EDIT: troppo male, anche se tutto sembrava bene in anteprima, gli esempi cliccabili sembra rovinare le cose ... Forse il layout va bene nella storia.

Ho sentito, ma non posso convalidare per IE, che sia IE che Firefox supportino lo pseudo-protocollo "view-source:". Firefox su Mac lo capisce, ma Safari no.

Il seguente bookmarklet non attiverà the XSLT transformation specificato in the XML. E anche se Firefox lo renderà usando alcuni colori, non eseguirà la trasformazione predefinita che userebbe normalmente per XML without any XSLT (quindi, il risultato di view-source NON produce un albero di documenti comprimibile che Firefox normalmente mostrerebbe):

javascript:(function(){ 
    var u = 'http://www.w3schools.com/xsl/cdcatalog_with_ex1.xml'; 
    var w = window.open(); 
    w.document.location.href = 'view-source:' + u; 
})() 

Quando si preleva il documento utilizzando Ajax, uno non è limitato allo alertoneporter utilizzato, ma può essere visualizzato anche in una nuova finestra. Ancora: questo non richiamerà la trasformazione XSLT specificata:

javascript:(function(){ 
    var u = 'http://www.w3schools.com/xsl/cdcatalog_with_ex1.xml'; 

    var w = window.open(); /* open right away for popup blockers */ 

    var x = new XMLHttpRequest(); 
    x.open('GET', u, true); 
    x.onreadystatechange = function(){ 
    if(x.readyState == 4){ 
     w.document.open('text/html'); 
     /* hack to encode HTML entities */ 
     var d = document.createElement('div'); 
     var t = document.createTextNode(x.responseText); 
     d.appendChild(t); 
     w.document.write('<html><body><pre>' 
      + d.innerHTML + '</pre></body></html>'); 
     w.document.close(); 
     w.focus(); 
    } 
    }; 
    x.send(null); 
})() 
0

Per quanto ne so, non c'è modo di fare ciò che stai cercando di fare. Il problema è che javascript non può leggere la dom dell'XML da una trasformazione xml/xsl lato client. Per quanto riguarda il javascript, è in esecuzione su un normale dominio HTML.

Tuttavia, potrebbe esserci qualche speranza a seconda del tipo di webapp. È possibile utilizzare ajax per ottenere l'xml dell'URL corrente. Finché non ci sono dati di post, o qualsiasi altra casualità, questo metodo dovrebbe funzionare bene.

2

Non puoi semplicemente "Visualizza sorgente" in entrambi i browser?

+1

Non voglio mettere troppo sforzo mentale sui tester. :) Ma non sorprendentemente questa sembra l'opzione migliore finora. –

+0

+1 in IE8 e Firefox il visualizzatore di sorgenti fa un ottimo lavoro di visualizzazione di XML. –

+0

Se si desidera modificare l'app che visualizza la fonte (ad esempio, in Blocco note2), consultare http://dotnet.org.za/thea/archive/2004/11/25/7933.aspx –

1

È possibile evitare un'istruzione di elaborazione utilizzando un passaggio intermedio per pre-elaborare l'XML prima che il contenuto venga emesso nel browser.

lato client suggerimento

  1. recuperare il documento XML in questione mediante una richiesta AJAX
  2. analizzare il codice XML in un DOM (nota: un DOM non il DOM)
  3. Attraversa il DOM e visualizza nel browser i dati richiesti

lato server suggerimento

Anziché richiedere direttamente il documento XML pertinente, fare una richiesta invece a uno script proxy che rimosso dal contenuto XML tutte le istruzioni di elaborazione, o addirittura tutto ciò che non si vuole.

Invece di:

window.location = 'http://example.com/document.xml'; 

uso:

window.location = 'http://example.com/proxy/'; 


Lo script in http://example.com/proxy/ sarebbe:

  1. carico document.xml
  2. Usa tutto ciò che è necessario rimuovere il proce istruzioni ssing dal contenuto XML
  3. uscita il contenuto XML
+0

Avresti potuto renderlo più breve semplicemente scrivendo "rendering di un documento diverso o puntare a un documento diverso". –

2

Fintanto che non avrebbe dovuto fare con autorizzazioni di dominio trasversali, una semplice richiesta AJAX/finestra di avviso con la sorgente XML farebbe il trucco. Dovrai aggiungere un po 'alla dichiarazione xmlHttp per renderla compatibile con IE.

<html> 
<body> 

<script language="JavaScript"> 
function ajaxFunction() 
{ 

var xmlHttp=new XMLHttpRequest();; 

    xmlHttp.onreadystatechange=function() 
    { 
    if(xmlHttp.readyState==4) 
     { 
     alert(xmlHttp.responseText); 
     } 
    } 
    xmlHttp.open("GET","YOURFILE.xml",true); 
    xmlHttp.send(null); 

} 
</script> 

<a href="#" onclick="JavaScript:ajaxFunction()">Errors</a> 

</body> 
</html> 
Problemi correlati