web-dev-qa-db-fra.com

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

J'utilise une version adaptée du code Google prettify sur ma page qui me permet de mettre en évidence le code de Mathematica . Pour l’injection correcte du code js nécessaire, le plugin JPrettify est très pratique. Comme ce plugin semble ne plus être disponible officiellement et que je dois quand même le modifier, j'ai créé ma propre version sur GitHub .

Hier, j’étais indique le fait que cela ne fonctionne pas dans Joomla 3 et qu’après un certain débogage, nous avons découvert que la fonction PrettyPrint n’est pas appelée lorsqu’elle est insérée comme suit dans la tête html:

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

C’est leur façon de faire JPrettify (ligne 53). Après quelques recherches sur Google, il s'avère que le problème est la bibliothèque mootools . Nous avons résolu le problème en insérant statiquement

<body onload="PrettyPrint()">

dans le fichier principal de modèle php, ce qui n’est bien sûr pas la bonne façon d’aller.

Question: Pour que le plugin fonctionne avec différentes versions de Joomla, quelle est la meilleure méthode pour appeler PrettyPrint()?

6
halirutan

Plutôt que de faire du body onload, ce qui suit devrait fonctionner:

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

Ou si vous préférez utiliser Javascript pour déterminer quand la fonction est appelée, vous pouvez utiliser:

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

Joomla 3 poursuit le travail de suppression des scripts basés sur Mootools et de les remplacer par ceux de jQuery. La principale raison pour laquelle votre code échoue est que vous ne chargez pas Mootools vous-même. Dans les versions précédentes de Joomla, il avait peut-être été chargé par la présentation principale ou par un module, et maintenant, il n'est plus chargé car les scripts n'en ont plus besoin.

Donc, si vous en avez besoin pour votre module, chargez-le avec JHtmlBehavior::famework() ( http://api.joomla.org/cms-3/classes/JHtmlBehavior.html#method_framework ).

La même chose s'applique si vous réécrivez votre script pour utiliser jQuery. Ne comptez pas sur son chargement, dites à Joomla que vous en avez besoin. Joomla veillera à ce qu'il ne soit chargé qu'une seule fois. Pour charger jQuery, vous utiliseriez JHtmlJquery::framework() ( http://api.joomla.org/cms-3/classes/JHtmlJquery.html#method_framework ).

2
Bakual