2009-04-22 12 views
5

Estoy intentando escribir un bookmarklet para ayudar a algunos verificadores de QA a enviar información de depuración útil cuando surgen problemas. Actualmente puedo establecer window.location a una URL que proporciona esta información de depuración, pero este recurso es un documento XML con una directiva de procesamiento xml-stylesheet.¿Hay alguna manera de que los navegadores ignoren o anulen las instrucciones de procesamiento de xml-stylesheet?

En realidad, sería más conveniente si los evaluadores pudieran ver los datos XML sin formato como texto sin formato o la representación XML predeterminada para IE y Firefox.

¿Alguien sabe una forma de deshabilitar o anular directivas de hojas de estilo xml provistas dentro de un documento XML, utilizando Internet Explorer o Firefox?

Editar: He abierto una recompensa en esta pregunta. Requisitos: Sólo

  • código del lado del cliente, sin intervención del usuario permite
  • Soluciones para IE y Firefox es necesario (que pueden ser diferentes soluciones)
  • Desactivación de procesamiento de estilo y que lo hacen en forma de texto es aceptable
  • procesamiento de hoja de estilo XSL Anulación con un encargo es aceptable
  • representación XML con la hoja de estilo por defecto del navegador XML es aceptable

Respuesta

3

EDITAR: lástima, aunque todo parecía estar bien en la vista previa, los ejemplos se puede hacer clic parecen echar a perder las cosas ... Tal vez el diseño está muy bien en la historia.

He escuchado, pero no puedo validar para IE, que tanto IE como Firefox son compatibles con el pseudo protocolo "view-source:". Firefox en Mac lo entiende, pero Safari no lo entiende.

El siguiente bookmarklet no activará the XSLT transformation especificado en the XML. Y aunque Firefox lo renderizará usando algunos colores, no ejecuta la transformación predeterminada que normalmente usaría para XML without any XSLT (por lo tanto, el resultado de view-source NO arroja un árbol de documento colapsable que Firefox normalmente mostraría):

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

Al recuperar el documento utilizando Ajax, uno no se limita al alertoneporter utilizado, pero también puede mostrarlo en una ventana nueva. De nuevo: esto no invocará la transformación XSLT que se especifica:

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

Hasta donde yo sé, no hay forma de hacer lo que intentas hacer. El problema es que javascript no puede leer el dominio del xml de una transformación xml/xsl del lado del cliente. En lo que respecta al javascript, se está ejecutando en un html dom normal.

Sin embargo, puede haber alguna esperanza dependiendo del tipo de aplicación web. Puede usar ajax para obtener el xml de la url actual. Mientras no haya datos de publicación, o cualquier otra aleatoriedad, este método debería funcionar bien.

2

¿No puedes hacer "Ver código fuente" en ambos navegadores?

+1

No quiero poner demasiado esfuerzo mental en los probadores. :) Pero no es sorprendente que se vea como la mejor opción hasta ahora. –

+0

+1 en IE8 y Firefox el visor de fuente hace un muy buen trabajo al mostrar XML. –

+0

Si desea cambiar la aplicación que ve la fuente (por ejemplo, Notepad2), consulte http://dotnet.org.za/thea/archive/2004/11/25/7933.aspx –

1

Puede evitar una instrucción de procesamiento utilizando un paso intermedio para procesar previamente el XML antes de que el contenido se emita en el navegador.

sugerencia del lado del cliente

  1. recuperar el documento XML correspondiente a través de una petición AJAX
  2. analizar el código XML en un DOM (nota: un DOM no la DOM)
  3. Recorre el DOM y muestra en el navegador los datos requeridos

sugerencia del lado del servidor

En lugar de solicitar directamente el documento XML pertinente, hacer una petición en lugar de un script de proxy que elimina de un documento XML de todas las instrucciones de procesamiento, o de hecho todo lo que no desea.

En lugar de:

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

uso:

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


La secuencia de comandos en http://example.com/proxy/ haría:

  1. carga document.xml
  2. Uso lo que sea necesario para eliminar el proce ssing instrucción del contenido XML
  3. salida del contenido XML
+0

Podría haber hecho eso más corto simplemente escribiendo "renderizar un documento diferente o apuntar a un documento diferente". –

2

Mientras usted no tiene que lidiar con permisos de dominio cruzadas, una caja sencilla petición ajax/alerta con la fuente XML que hacer el truco. Tendrá que agregar un poco a la declaración xmlHttp para que sea compatible 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> 
Cuestiones relacionadas