Tengo un archivo JavaScript muy grande que me gustaría cargar solo si el usuario hace clic en un botón determinado. Estoy usando jQuery como mi marco. ¿Hay algún método o complemento incorporado que me ayude a hacer esto?
Algunos detalles más: tengo un botón "Agregar comentario" que debería cargar el archivo javascript TinyMCE (he hervido todas las cosas de TinyMCE en un solo archivo JS), luego llamar a tinyMCE.init (...).
No quiero cargar esto en la carga inicial de la página porque no todos harán clic en "Agregar comentario".
Entiendo que solo puedo hacer:
$("#addComment").click(function(e) { document.write("<script...") });
pero hay una manera mejor / encapsulada?
javascript
jquery
jquery-plugins
tinymce
lazy-loading
Jeff Meatball Yang
fuente
fuente
Respuestas:
Sí, use getScript en lugar de document.write; incluso permitirá una devolución de llamada una vez que se cargue el archivo.
Sin embargo, es posible que desee verificar si TinyMCE está definido antes de incluirlo (para llamadas posteriores a 'Agregar comentario') para que el código se vea así:
Asumiendo que solo tienes que llamarlo
init
una vez, eso es. Si no, puedes resolverlo desde aquí :)fuente
Me doy cuenta de que llego un poco tarde aquí (aproximadamente 5 años), pero creo que hay una mejor respuesta que la aceptada de la siguiente manera:
La
getScript()
función realmente evita el almacenamiento en caché del navegador . Si ejecuta un seguimiento, verá que el script se carga con una URL que incluye un parámetro de marca de tiempo:Si un usuario hace clic en el
#addComment
enlace varias veces,tinymce.js
se volverá a cargar desde una URL con marca de tiempo diferente. Esto anula el propósito del almacenamiento en caché del navegador.===
Alternativamente, en la
getScript()
documentación hay un código de muestra que muestra cómo habilitar el almacenamiento en caché creando unacachedScript()
función personalizada de la siguiente manera:===
O, si desea deshabilitar el almacenamiento en caché a nivel mundial, puede hacerlo utilizando
ajaxSetup()
lo siguiente:fuente
$.getScript({url: "test.js",cache:true})