2013-07-16 2 views
3

Я пытаюсь использовать jQuery для загрузки TinyMCE 4 по требованию из CDN безрезультатно. Я бы хотел избежать загрузки TinyMCE при загрузке страницы, поскольку это (относительно) объемный набор скриптов, и вместо этого я планирую запустить загрузку, когда пользователь нажимает кнопку. Вот что у меня есть:jQuery Загрузка TinyMCE 4 по запросу

HTML:

... 
<script src='//ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js'></script> 
... 

JQuery:

... 
if (typeof TinyMCE == 'undefined') { 
    $.getScript('//tinymce.cachefly.net/4/tinymce.min.js', function() { 
    alert('Loaded!'); 

    tinymce.init({ 
     selector: 'textarea', 
     plugins: [ 
     'autolink contextmenu image link table' 
     ], 
     menubar: false, 
     statusbar: false, 
     toolbar: false 
    }); 
    }); 
} 
... 

Я могу видеть, что JQuery действительно принести сценарий, как я могу видеть сетевую активность в моем инспекторе. Вызывается метод обратного вызова, так как я вижу диалог Loaded!, но TinyMCE не инициализируется. Консоль JavaScript не показывает никаких ошибок.

Любая идея о том, как я могу инициализировать TinyMCE?

Спасибо за ваше время.

+0

Вы проверили ошибку в консоли? –

+0

@RajeshKumar «Консоль JavaScript не показывает никаких ошибок». –

+0

Вы пробовали следующий код: if (typeof tinymce == 'undefined') { $ .getScript ('// tinymce.cachefly.net/4/tinymce.min.js', function() { window.tinymce. dom.Event.domLoaded = TRUE; tinymce.init ({ селектор: 'текстового поля', плагин: [ 'AutoLink ContextMenu изображение ссылка таблица'], MenuBar: ложь, статусные: ложь, панели инструментов: ложные }); }); } –

ответ

1

изменить код следующим образом :

if (typeof tinymce == 'undefined') { 
     $.getScript('//tinymce.cachefly.net/4/tinymce.min.js', function() { 
      window.tinymce.dom.Event.domLoaded = true; 
      tinymce.init({ 
       selector: 'textarea', 
       plugins: ['autolink contextmenu image link table'], 
       menubar: false, 
       statusbar: false, 
       toolbar: false 
      }); 
     }); 
    } 

Он работает для меня. подробнее https://stackoverflow.com/a/13361509/392526

3

Добавьте следующее:

if (typeof tinymce == 'undefined') { 
    $.getScript('//tinymce.cachefly.net/4/tinymce.min.js', function() { 
     window.tinymce.dom.Event.domLoaded = true; 
     tinymce.baseURL = "//tinymce.cachefly.net/4"; 
     tinymce.suffix = ".min"; 
     tinymce.init({ 
      selector: 'textarea', 
      plugins: ['autolink contextmenu image link table'], 
      menubar: false, 
      statusbar: false, 
      toolbar: false 
     }); 
    }); 
} 
+0

Немного объяснений было бы полезно. В чем была проблема и как ваш код решил это? – showdev

0

Цитата из оригинального вопроса:

Любая идея о том, как я могу получить TinyMCE инициализировать?

Существует проблема с JQuery.getScript и TinyMCE, который я думаю, что вызывает у вас проблемы. Мне потребовался день, чтобы понять это, поэтому я подумал, что я должен упомянуть об этом здесь.

  1. $ .getScript как добавляет и удаляет скрипт вы загружаете, выполняя его содержание в этом процессе. Итак, к тому времени, когда ваша функция успеха запускает tinymce.init, тег сценария больше не существует в вашем документе.
  2. tinymce.init, с другой стороны, просматривает ваш документ для этого конкретного тега скрипта, чтобы узнать базовый url для всех его файлов. Если он его не найдет, он получит его из document.location.

Я не могу сказать, что является лучшим способом решить эту небольшую проблему. Я нашел следующее, чтобы сделать трюк для меня (tinymce 4.2.7):

Открыть tinymce.min.js и найти строку комментария ...

  // Get base where the tinymce script is located 

Посмотрите несколько строк вниз, где вы найдете заявление ...

  src = scripts[i].src; 

... который должен быть изменен, чтобы ...

  src = "http://yourdomain.com/path/to/tinymce/tinymce.min.js"; 

Я определил причину. Но я не очень доволен своим решением. Может быть, кто-то еще придумает лучший.

Смежные вопросы