it-swarm-es.tech

window.addEvent ('domready', ...) alternativa

Utilizo una versión adaptada del código de google prettify en mi página que me permite resaltar código de Mathematica . Para la inyección correcta del código js necesario, el plugin JPrettify es bastante útil. Dado que este complemento parece que ya no está oficialmente disponible y, de todos modos, necesito ajustarlo, configuré mi propia versión en GitHub .

Ayer, estaba señaló el hecho que no funciona en Joomla 3 y después de algunas depuraciones descubrimos que la función PrettyPrint no se llama cuando se inserta de la siguiente manera en la cabeza html:

window.addEvent('domready', function() { prettyPrint();});

Esta es la forma en que JPrettify (línea 53) lo hace. Después de buscar en Google, resulta que el problema es la biblioteca mootools . Resolvimos el problema insertando estáticamente

<body onload="PrettyPrint()">

en el archivo php de plantilla principal, que por supuesto no es el camino correcto.

Pregunta: Para que el complemento funcione a través de diferentes versiones de Joomla, ¿cuál es el mejor método para llamar a PrettyPrint()?

6
halirutan

En lugar de hacer una carga corporal, lo siguiente debería funcionar:

$(document).ready(function() {
    PrettyPrint();
});

O si prefiere usar Javascript para determinar cuándo se llama a la función, puede usar:

window.onload = function() {
    PrettyPrint();
};
2
Lodder

Hay un trabajo en curso dentro de Joomla 3 para eliminar los scripts basados ​​en Mootools y reemplazarlos por los de jQuery. El problema principal por el que falla su código es que no carga Mootools usted mismo. En versiones anteriores de Joomla, puede haber sido cargado por el diseño principal o un módulo, y ahora ya no se carga porque los scripts ya no lo necesitan.

Entonces, si lo necesita para su módulo, cárguelo usando JHtmlBehavior::famework() ( http://api.joomla.org/cms-3/classes/JHtmlBehavior.html#method_framework ).

Lo mismo se aplica si reescribe su script para usar jQuery. No cuente con que se cargue, dígale a Joomla que lo necesita. Joomla se encargará de que solo se cargue una vez. Para cargar jQuery, usaría JHtmlJquery::framework() ( http://api.joomla.org/cms-3/classes/JHtmlJquery.html#method_framework ).

2
Bakual