TinyMCE не работает с Chrome, когда я динамически устанавливаю Content - PullRequest
4 голосов
/ 23 августа 2009

У меня есть сайт, который я положил:

<body  onload="ajaxLoad()" > 

У меня есть функция javascript, которая затем вставляет данные из моей базы данных в текстовый редактор с помощью метода setContent javascript в текстовой области. В Firefox и IE это нормально, но в Chrome иногда ничего не появляется. Там нет ошибки, просто пустой редактор.

В разделе тела у меня есть:

  <textarea id="elm1" name="elm1" rows="40" cols="60" style="width: 100%"> 
</textarea>

В главном разделе у меня есть:

function ajaxLoad() {
        var ed = tinyMCE.get('elm1');
        ed.setProgressState(1); // Show progress
        window.setTimeout(function() {
            ed.setProgressState(0); // Hide progress
            ed.setContent('<p style="text-align: center;"><strong><br /><span   style="font-size: small;">General Manager&#39;s Corner</span></strong></p><p style="text-align: center;">August&nbsp;2009</p><p>It&rsquo;s been  15<sup>th</sup> and so have a Steak Night (Saturday, 15<sup>th</sup>) and a shore Dinner planned (Saturday, 22<sup>nd</sup>) this month. urday, September 5<sup>th</sup>. e a can&rsquo;t missed evening, shas extended it one additional week. The last clinic will be the week of August 11<sup>th</sup>. </p><p>&nbsp;Alt (Tuesday through Thursday) </p><p>&nbsp;I wouClub.</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;<strong></strong></p>');
        }, 1);
    }

Я не уверен, что некоторые из форматов, которые Chrome отклоняет, похоже, что если TinyMCE может проанализировать его в одном браузере, он должен быть в состоянии сделать это в любом браузере, поэтому я запутался.

Есть предложения?

Ответы [ 7 ]

9 голосов
/ 09 сентября 2009

Справочная информация:

По разным причинам onload() не считается подходящим подходом для загрузки Javascript, см., Например, Запуск кода в Document Ready снаиболее важным / заметным является то, что код Javascript не запускается до тех пор, пока полностью не завершится загрузка страницы, включая изображения и тому подобное, что может занять вечность (например, если внешний сервер баннерной рекламы и т. д.).

Вместо этого рекомендуется загружать Javascript, как только DOM будет готов, но, к сожалению, для этого нет кросс-браузерно-совместимого нативного решения, см. Получение уведомлений при загрузке страницы DOM (но до window.onload) ;обратите внимание, что весь мой ответ основан на самой превосходной библиотеке Javascript jQuery , которая предлагает кросс-браузерное решение для этой проблемы , поэтому я определенно предпочел бы два ответа с более высоким рейтингом, чемЯ принял принятое решение.

Вероятная причина:

Кажется, ваша проблема вызвана противоположным поведением: Chrome облегчает WebKit движок рендеринга, так же как Safari , и для последнего onload() обсуждается поведение по-другому, см. Раздел Когда срабатывает загрузка? в Safari быстрее.Другое описание этой проблемы, специфичное для Chrome, можно найти в window.onload, который некорректно работает в Chrome , но без объяснения причин.

В заключение я подозреваю, что onload() сработает перед DOMфактически загружен полностью, по крайней мере, в отношении требований TinyMCE, который общеизвестно хрупок в отношении подобных проблем и просто перестает загружаться.

Возможное решение:

Просто облегчениеатрибут defer для тега script, как указано в window.onload, работает неправильно в Chrome снова не совместим с разными браузерами, поэтому я быпросто воспользуйтесь широко распространенным и проверенным подходом использования уже упомянутого кросс-браузерного решения jQuery для решения проблемы onload() , что в любом случае является хорошей практикой и в принципе должно также решить вашу обратную проблему.


Обновление:

Действительно, есть некоторые ошибки в WebKit который может поддержать мой вывод (независимо от того, является ли это поведение ошибкой или преднамеренным), см .:

3 голосов
/ 03 сентября 2009

У меня была похожая проблема (редактор не отображается в chrome), и я прочитал на каком-то форуме, что если tinyMCE не может найти некоторые файлы, он просто перестает загружаться Попробуйте отследить, если все найдено, используя сетевую вкладку firebug (сначала очистите кеш).

2 голосов
/ 24 ноября 2010

РЕШЕНИЕ:

Я боролся за то, чтобы панель инструментов TinyMCE не появлялась во всех видах секнариозов .... она работала бы в браузере IE одного пользователя, но не в другом. Это не будет работать в Firefox или Chrome и т. Д.

Оказывается, если в новейшей версии 3.3 есть STILL ошибки, которые они не исправили. Это происходит, когда в коде JavaScript вашей веб-страницы, где вы создаете экземпляр TinyMCE, если вы добавили код для части плагина, где вы загружаете два конкретных плагина, панель инструментов не появляется, и вы видите HTML: плагины:

"safari,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,
inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,
fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,**imagemanager,filemanager**",

Удалите все ссылки на imagemanager и filemanager на своей веб-странице, затем обновите браузер ...

Когда вы это сделаете, проведите повторное тестирование в Chrome, Firefox и IE, и TinyMCE внезапно появится! Ух ты .... чудо, да?

Оказывается, что их "основной разработчик" не устранил проблему, но объясняет ее как таковую, если вы хотите по-прежнему использовать эти плагины и все же решить проблему. Его цитата следующая:

"Если ImageManager / FileManager старые, они могут не использовать новые скрипт загрузчик API. И новая версия 3.3 загрузит все зависимые скрипты асинхронные вместо синхронизации. - Спок - Главный разработчик TinyMCE "

2 голосов
/ 05 сентября 2009

Прежде всего; следите за тем, чтобы у вас была последняя версия TinyMCE.

Я не смог воспроизвести вашу проблему, учитывая предоставленную вами информацию. Вроде просто отлично (с фальшивым ajaxload).

Вы всегда можете попытаться пройти через «черный вход»;

var myed = document.getElementById('elm1_ifr');
myed.contentDocument.getElementById('tinymce').innerHTML="<p style=\"text-align: center;\"><strong>hacking <span style=\"font-size: small;\">my</span> way in.</strong></p>";

Надеюсь, тебе удачи!

1 голос
/ 21 июня 2012

Для функции tinyMCE.init() есть опция oninit, введите ваш метод:

tinyMCE.init({
    oninit: function(){
        tinyMCE.activeEditor.setContent('blah');
    }
});

Так работает.

Редактор не полностью загружен при событии document load, так как загрузчик редактора пост-загрузит несколько файлов.

1 голос
/ 23 марта 2010

Существует несколько способов установить контент в редакторе TinyMCE. Если вы хотите, чтобы контент присутствовал при первой загрузке страницы, вы можете просто поместить его между тегами.

В противном случае вы можете сделать это через скрипт следующим образом:

window.onload = function () {

tinyMCE.getInstanceById ( "ProfileText") setContent ( 'тест');.

};

Я завернул код в блок window.onload. Если у вас есть другие функции, которые динамически устанавливают содержимое таким образом после того, как редактор TinyMCE уже загружен, вам это не нужно.

0 голосов
/ 22 марта 2010

та же проблема здесь, т.е. нуждается

var ed = tinyMCE.get('content');
ed.setContent('zzz');

другие браузеры

document.getElementById("content").innerHTML="zzz";

Я очень разочарован

потребуется проверить браузер в javascript, чтобы он работал правильно, вот и все * sux

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...