8
votes

Ckeditor - détruire une instance lorsque le nœud DOM a été supprimé

lire via le Documentation CKEditor , je vois qu'ils avoir une option pour détruire une instance avec ckeditor.instances.instancename.destroy (); code>. Toutefois, si le DOM a changé et que toute la structure WYSIWYG DOM a été supprimée, j'obtiens l'erreur suivante dans Chrome: xxx pré>

... et le suivant à Firefox: P >

i.contentWindow is null


0 commentaires

3 Réponses :


2
votes

6 commentaires

Je suis un peu nouveau à la ligne de commande; Comment appliquer ce correctif? Je cours sur Windows 7 x64.


Il pourrait être trop complexe juste pour le faire. La façon dont je travaille est d'avoir une copie SVN, c'est facile avec TortoiseSVN, puis en utilisant le menu contextuel du dossier Utilisez l'option Patch et, après cela, vous devez reconditionner tout le code CKEditor (afin que vous puissiez installer Java). Il est dommage que vous soyez obligé de faire toutes ces étapes simplement parce qu'ils n'avaient pas aimé le patch et proposé quelque chose de plus complexe qu'à la fin n'a pas été ajouté.


Eh bien, comme je n'utilise pas SVN, j'ai traversé le fichier et apporté toutes ces modifications manuellement. Maintenant, toutes ces modifications étaient sous le dossier _source . J'assume ckeditor.js est en quelque sorte compilé / concaténé / compressé de tous ces fichiers. Comment allais-je faire ça?


Ce document explique la compression: docs.cksource.com/ckatéitor_3.x/Developers_Guide/ckpackager < / a> Mais bien que cela stipule qu'il y ait un exe, il semble que vous ayez encore besoin de l'environnement Java de toute façon, alors j'oublierais.


Tout a fonctionné. Je ne pense pas que vous ayez besoin de l'environnement Java avec le EXE .


Super. Quelqu'un a déclaré qu'il n'avait pas fonctionné sans Java installé et je lui ai fait confiance au lieu d'essayer de vérifier cela.



15
votes

Si vous devez détruire l'objet CKeditor et les élemis du DOM après un appel AJAX, vous pouvez le faire en définissant un paramètre booléen à l'appel de fonctions Destroy (true). De cette façon, il ne va pas essayer de mettre à jour le DOM:

    if(typeof(editor) == 'undefined')
        var editor=null;

    function ck_delete(editor)
    {
        if(typeof(editor) != 'undefined' && editor!=null)
            editor.destroy();
    }

    function ck_init(ck_inst_name)
    {
        var el_id=document.getElementById(ck_inst_name);
        if(typeof(el_id) != 'undefined' && el_id!=null)
        {
            if(typeof(editor) == 'undefined' || editor==null)
            {
                editor=CKEDITOR.replace( ck_inst_name );
            }
            else
            {
                ck_delete(editor);
                editor=null;
                editor = CKEDITOR.replace( ck_inst_name );
            }
        }
    }


3 commentaires

Cela a résolu un problème similaire (le même?) Pour moi (remplaçant CKEditor basé sur le retour de l'appel d'Ajax) mais je reçois toujours le TypeError non décongelé (identique à l'OP). Je ne sais pas s'il y a des effets secondaires, mais j'aimerais vous débarrasser du message d'erreur. Mon code pour charger l'éditeur est le suivant: fenêtre.makeckeitor = fonction (E, W, H) {var cki, config, ei; ei = ckeditor.Instances [e]; if (ei) ei.destroy (vrai); config = {largeur: w, hauteur: h}; retour cki = ckeditor.replace (e, config); }; des idées sur la façon dont je peux me débarrasser du msg?


@Kenthompson: J'ai une approche peu différente, mais avez-vous essayé de détruire l'objet CK avant l'appel Ajax?


Il suffit de courir dans ce problème et comme promis, Detroy (Vrai) a travaillé à résoudre le problème. Merci!



1
votes

Nous avons eu ce problème intégrant CKEDITOR dans GWT, dans une boîte de dialogue contextuelle. Lorsque la boîte de dialogue a été détruite, CKEDITOR a soulevé cette erreur - "Impossible de lire le" document "de NULL." La solution consistait à détruire CKeditor avant de fermer la boîte de dialogue. (Nous avons dû prolonger la classe GWT CKEDITOR afin de remplacer cela - à l'aide de la syntaxe de l'éditeur.Destroy (vraie) donnée par Erik - Merci, Erik!)


1 commentaires

Pas de problème, heureux d'avoir pu aider