Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

244
Visualizações
¿Cómo ejecutar el código en el complemento TinyMCE después de que `init_instance_callback` ya se haya completado?

Estoy tratando de crear un nuevo complemento TinyMCE. ¿Hay alguna manera de obtener una devolución de llamada al código del complemento después de que init_instance_callback ya se haya ejecutado para todo el editor? Necesitaría ejecutar algún código dentro del complemento cuando esto suceda y prefiero automatizar esto dentro del complemento en lugar de documentar que se debe llamar a algún método específico del complemento desde la devolución de llamada init_instance_callback configurada por el usuario final.

¿Los eventos del editor TinyMCE al complemento están documentados en alguna parte? Supongo que es algo a lo largo de las líneas

 tinymce.PluginManager.add('myplugin123', function(editor, url) { ... editor.on("some-event-name-for-init_instance_callback-complete", function (x) { // the code I would like to run goes here ... }); });

Me gustaría usar la última versión de TinyMCE, en este momento parece ser la versión 5.10.2.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

No creo que la devolución de llamada active un evento cuando finalice, pero puede hacerlo manualmente con su propio evento personalizado:

https://fiddle.tiny.cloud/9Uhaab/2

La parte clave es:

 init_instance_callback : function(editor) { console.log('Editor: ' + editor.id + ' is now initialized.'); //Fire your own event at the end of init_instance_callback editor.fire('my_custom_event'); },

La última línea dispara un evento que creas. A continuación, puede escuchar ese evento y hacer lo que necesite. En el ejemplo de Fiddle, también hago eso en la configuración de TinyMCE, pero puede hacerlo en su complemento como sugiere.

about 4 years ago · Juan Pablo Isaza Relatório

0

Parece que TinyMCE ejecuta el siguiente código para inicializar el editor (código fuente real para TinyMCE versión 5.10.2):

 var initEditor = function (editor) { editor.bindPendingEventDelegates(); editor.initialized = true; fireInit(editor); editor.focus(true); moveSelectionToFirstCaretPosition(editor); editor.nodeChanged({ initial: true }); editor.execCallback('init_instance_callback', editor); autoFocus(editor); };

La llamada al método fireInit(editor); desencadena el evento Init para el editor y todos los detectores de eventos se ejecutarán inmediatamente (incluido cualquier complemento que haya ejecutado previamente editor.on("Init", ...) para esperar este evento).

Si ese código de complemento quiere ejecutar código después de que init_instance_callback ya se haya ejecutado, puede ejecutar

 setTimeout(function() { // code to run after init_instance_callback }, 0);

Esto funciona en la práctica con la implementación actual porque agregará la referencia de función al final de la cola de eventos nativos del navegador que se ejecutará cuando el código JS regrese al bucle de eventos nativos del navegador. Obviamente, esto sucede cuando el código TinyMCE ha terminado de ejecutar el código que se está ejecutando actualmente.

Tenga en cuenta que la implementación de autoFocus() activará el evento de enfoque después de un retraso codificado de 100 ms. Y autoFocus() no hará nada si editor.settings.auto_focus no es verdadero.

Tenga en cuenta que nada de esto está documentado en ninguna parte. El código fuente anterior es parte de TinyMCE 5.10.2, pero podría cambiar en el futuro, así que considere lo anterior como un truco en lugar de una función compatible adecuada.

Diría que agregar una llamada de función a través setTimeout() y escuchar el evento de focus debería ser bastante bueno. Lo que suceda primero será probablemente inmediatamente (o después de un retraso de 100 ms) después de que se haya ejecutado init_instance_callback .

Tenga en cuenta que si TinyMCE cambia el comportamiento para activar init_instance_callback a través del bucle de eventos nativo del navegador en el futuro, el truco anterior ejecutará el código demasiado pronto. Tenga en cuenta que, en ese caso, no hay un valor de retraso seguro (> 0) para esperar a que TinyMCE se ejecute primero porque, en teoría, la ejecución de JS puede detenerse durante un tiempo ilimitado entre el evento Init y la configuración del tiempo de espera para el disparador init_instance_callback . Si 0 no es un valor seguro (como con la implementación actual), cualquier valor distinto de cero tampoco es seguro.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda