De mi pregunta reciente , ya creé alguna función de JavaScript para la vista parcial de carga dinámica. Entonces, no puedo depurar ningún JavaScript de carga dinámica. Porque todo el JavaScript cargado será evaluado por la función "eval".
Sin embargo, encontré alguna forma de crear un nuevo JavaScript utilizando el siguiente script para crear dinámicamente un script en el encabezado del documento actual. Todos los scripts cargados se mostrarán en HTML DOM (que puede usar cualquier depurador para encontrarlos).
var script = document.createElement('script')
script.setAttribute("type","text/javascript")
script.text = "alert('Test!');";
document.getElementsByTagName('head')[0].appendChild(script);
Por cierto, la mayoría de los depuradores (IE8 Developer Toolbar, Firebug y Google Chrome) no pueden establecer puntos de interrupción en ningún script dinámico. Porque la secuencia de comandos depurable debe cargarse la primera vez que se carga la página.
¿Tiene alguna idea para depurar contenido o archivo de script dinámico?
Actualización 1: agregar código fuente para probar
Puede utilizar el siguiente archivo xhtml para intentar depurar algún valor de variable.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Dynamic Loading Script Testing</title>
<script type="text/javascript">
function page_load()
{
var script = document.createElement('script')
script.setAttribute("id", "dynamicLoadingScript");
script.setAttribute("type","text/javascript");
script.text = "var someVariable = 0;\n" +
"someVariable = window.outerWidth;\n" +
"alert(someVariable);";
document.getElementsByTagName('head')[0].appendChild(script);
}
</script>
</head>
<body onload="page_load();">
</body>
</html>
Desde la respuesta, solo lo pruebo en FireBug. El resultado debe mostrarse como las siguientes imágenes.
Mire el script "dynamicLoadingScript" que se agrega después de cargar la página.
Pero no se encuentra en la pestaña de script de FireBug
Actualización 2: crear un punto de interrupción de depuración en un script de carga dinámico
Las dos imágenes anteriores muestran la inserción de "depurador"; La declaración en alguna línea de secuencia de comandos puede disparar un punto de interrupción en la secuencia de comandos de carga dinámica. Sin embargo, ambos depuradores no muestran ningún código en el punto de interrupción. Por tanto, es inútil hacer esto.
Gracias,
fuente
Respuestas:
También sería posible utilizar Chrome para el mismo. Chrome tiene una función en la que puede especificar un atributo de analizador y hacer que la pieza de JS dinámico aparezca como un archivo que luego se puede navegar y establecer puntos de interrupción.
el atributo que debe establecerse es
donde dynamicScript.js es el nombre del archivo que debería aparecer en el navegador de archivos de script.
Más información aquí
Paul Irish también habla de ello brevemente en su excelente charla sobre Herramientas y la pila de desarrollo de aplicaciones web.
fuente
Intente agregar un "depurador"; declaración en el javascript que está agregando dinámicamente. Esto debería hacer que se detenga en esa línea independientemente de la configuración del punto de interrupción.
fuente
Sí, (ahora) es posible depurar JavaScript cargado dinámicamente usando Google Chrome.
No es necesario agregar un
debugger;
atributo adicional o cualquier otro para el archivo JS cargado dinámicamente. Simplemente siga los pasos a continuación para depurar:Método 1:
Mi jefe de tecnología acaba de mostrar una forma súper fácil de depurar métodos de Javascript cargados dinámicamente.
En mi caso,
GetAdvancedSearchConditonRowNew
si el método JS se ha cargado, mostrará la definición del método.
Método 2:
Como ejemplo, estoy cargando un archivo JS cuando hago clic en un botón usando
ajax
call.network
pestaña en las herramientas de desarrollo de google chromeRetrieveAllTags?_=1451974716935
)initiater
y encontrará su archivo JS cargado dinámicamente (con prefijoVM*
).VM*
archivo para abrirlo.fuente
Estoy usando Google Chrome para ese propósito.
En Chrome, en la pestaña de secuencias de comandos, puede habilitar 'pausar en todas las excepciones'
Y luego póngalo en algún lugar de su línea de código
try{throw ''} catch(e){}
. Chrome detendrá la ejecución cuando llegue a esta línea.EDITAR: imagen modificada para que quede más claro de lo que estoy hablando.
fuente
try{throw ''} catch(e){}
luego habilita el modo 'pausa en todas las excepciones' y Chrome detendrá la ejecución cuando se lance la excepción. Lo he comprobado muchas veces. Cargué otra imagen. Allí está más claro de lo que estoy hablando.debugger
no funcionaría en un script creado dinámicamente en ese entonces.Creo que es posible que deba darle al código evaluado un "nombre" como este:
http://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/
Si lo hace, creo que es probable que el
debugger
enfoque de la "actualización 2" funcione en ese momento.fuente
//@ sourceURL=blah
en producción.debugger
parte que causa problemas, no el comentario de la fuente (que seguramente es ignorado por JS)ACTUALIZACIÓN : se ha cambiado la sintaxis de sourceUrl (@ se reemplaza por #) para evitar errores en navegadores no compatibles (leer: IE). Detalles
fuente
Usando Chrome (12.0.742.112) con el código que proporcionó más una declaración de depuración como esta
funciona para mi.
Puede que sea más tangible si vincula el cambio de selector a un evento en su vista parcial en lugar de crear elementos de script en el cuerpo html (no se siente bien).
Podrías hacer algo como esto
Este código siempre agregaría un selector de limitación a todas las operaciones de selección de jQuery realizadas mientras el mouse está en un elemento determinado dado que el HTML no está desordenado.
(Aún parece hacker, puede que alguien tenga una mejor solución)
salud
fuente
En Firebug, debería poder ver ese script después de que se cargue la página y se inyecte el script. Cuando lo haga, puede establecer un punto de interrupción en el lugar apropiado y se conservará cuando actualice la página.
fuente
Javascript cargado dinámicamente aún debe ser analizado por el navegador, aquí es donde se encuentra WebKit o el depurador FireBug, por lo que está sujeto al depurador pase lo que pase, creo que esto es lo mismo para las herramientas de desarrollador en IE8,
Por lo tanto, su código está sujeto al depurador, por lo que el problema no será en ese archivo o texto si no se produce un error
La otra cosa es
script.text = "alert('Test!');";
que no es válida, por lo que no funcionará en todos los navegadores, lo que desea esscript.innerHTML = "alert('Test!');";
a pesar de que es innerHTML, significa código dentro de las etiquetas HTML, no el HTML dentro, solo la mayoría de las personas lo usan para esto, por lo que se explica mal
EDITADO PARA LA ACTUALIZACIÓN DOS
Y en la segunda actualización usando Chrome hice esto
ir a aproximadamente: en blanco Abra la consola y pegue en
luego se romperá y abrirá la pestaña del script con about: se muestra en blanco (no hay nada que ver)
Luego, en el lado derecho, muestre la lista de la pila de llamadas, luego haga clic en el segundo (función anónima) y se lo mostrará.
Entonces, en su archivo tendrá una (función anónima) que es el código que está ejecutando y verá el punto de interrupción allí. para que sepa que está en el correcto.
fuente
Con la herramienta para desarrolladores de Google Chrome (o Safari ), puede ejecutar JavaScript línea por línea.
Secuencias de
>
comandos de herramientas de desarrollo>
Elija qué secuencia de comandos desea depurar el>
signo de pausa en el lado derecho O establezca puntos de interrupción haciendo clic en el número de líneafuente
Una opción que me gusta es usarla agregando una declaración console.log ('') en mi código. Una vez que esta declaración aparece en la consola, se le asocia un número de línea. Puede hacer clic en ese número para ir a la ubicación en la fuente y establecer un punto de interrupción. El inconveniente de este enfoque es que los puntos de interrupción no se conservan en las recargas de la página y debe ejecutar el código antes de poder agregar un depurador.
fuente
Para el navegador Google Chrome actual u otros navegadores modernos, puede buscar fácilmente cualquier código evaluado con una herramienta de desarrollador como las siguientes imágenes.
Cree un punto de interrupción y ejecute la función para probarlo.
fuente