web-dev-qa-db-fra.com

ckeditor ne lit pas le code d'intégration des médias

J'utilise le plugin d'intégration de médias pour ckeditor. Cela fonctionne bien, le code est correctement enregistré dans la base de données et youtube, soundcloud etd. les joueurs s'affichent bien sur la page. Mais lorsque l'utilisateur se rend dans son administration, où il peut modifier les informations, le texte à l'intérieur et avec les balises ne s'affiche pas, donc lorsque l'utilisateur clique sur le bouton Enregistrer, tous les iframes précédemment enregistrés seront "effacés" et seuls les autres du texte formaté sera enregistré. Existe-t-il un moyen d'afficher le code iframe dans le ckeditor?

19
Michal S

Je suppose que vous utilisez CKEditor 4.1.x qui est fourni avec Advanced Content Filter (ACF). Le plus probable est que vous utilisez différents éditeurs pour l'édition frontend/backend.

Chaque plugin étend la propriété allowedContent avec ses propres règles pour les balises, les attributs et les classes. À l'aide de ces règles, l'éditeur supprime automatiquement le contenu indésirable, par exemple, si votre éditeur frontal autorise <iframe> car il a un plugin mediaembed chargé, alors votre éditeur backend sans ce plugin supprimera votre <iframe> du contenu.

De plus, ACF observe également la configuration de votre barre d'outils, donc même si vous incluez le plugin mais que vous ne voulez pas que le bouton dans la barre d'outils, tout contenu fourni par le bouton (par exemple <iframe>) sera également interdit dans la sortie de l'éditeur.

Vous pouvez facilement vérifier si votre éditeur accepte <iframes>. Appelez simplement ce qui suit et voyez le résultat:

CKEDITOR.instances.yourInstance.filter.check( 'iframe' );
>>> true // it's allowed

Si c'est false, il existe plusieurs solutions à votre problème:

  1. Activez le plugin mediaembed dans votre éditeur backend (avec le bouton dans la barre d'outils).
  2. Étendre config.extraAllowedContent pour le récupérer.

Alors que le premier la solution est simple , le second peut être délicat pour vous. allowedContent la règle pour le plugin mediaembed est la suivante (voir code du plugin ):

allowedContent: 'iframe[*]' // stands for: iframe element with any attribute

Si vous ajoutez ce qui suit à la configuration de votre éditeur d'arrière-plan, vous aurez des iframes de retour dans votre contenu sans charger le plugin mediaembed:

config.extraAllowedContent = 'iframe[*]'

Si cette solution ne fonctionne pas pour vous, veuillez fournir les configurations de l'éditeur et la version de CKEditor afin que les gens puissent vous aider.

41
oleq
CKEDITOR.config.allowedContent = true;

travaille pour moi.

23
gokhan

Pour permettre à CKEditor de stocker du code HTML personnalisé sans qu'il ne disparaisse, vous devez définir l'indicateur de contenu autorisé sur true.

var allowedContent = true; // to allow custom html like iframe or div's

CKEDITOR.replace('yourEditorWindowsId', {
    allowedContent
},
0
TidyDev