Страница полностью пуста, несмотря на наличие исходного кода! (TinyMCE, FireFox) - PullRequest
2 голосов
/ 10 июля 2009

Хорошо, ребята, вот сложный вопрос ...

В отношении этой страницы .

Страница, по-видимому, случайно не будет отображать выходные данные сервера при использовании Firefox (версия 3.5). Я не видел, чтобы эта проблема возникала в Safari или IE. Лучший способ возникновения проблемы - просто перезагрузить страницу примерно 10 раз, и это должно было произойти к тому времени, и как только это произойдет, она будет продолжаться при последующих обновлениях, пока вы не измените страницу.

Проблема буквально в том, что браузер не отображает вывод (код). При просмотре исходного кода отображается весь соответствующий код, а в браузере отображается пустая белая страница. Плагины веб-разработчика и Firebug не показывают ошибок, которые бы указывали на проблему. Я проверил это на отдельной системе и ОС, и это происходит в Firefox на этой системе.

Проблема не возникала до тех пор, пока TinyMCE (библиотека JavaScript для текстового редактора Rich Text Editor) не была добавлена ​​в проект. Однако TinyMCE работает там, где и должен.

Я знаю, что это запутанная проблема, но я совершенно заблудился относительно того, что может быть причиной этой важной проблемы. Заранее спасибо.

РЕДАКТИРОВАТЬ : Если это поможет ... Я заметил, что если я вызываю ошибку файла CSS, меняя источник таблицы стилей на что-то несуществующее (xxx.css), страница будет непрерывно отображать без проблем (кроме того, что связано css не отображается из-за изменения src). Я также заметил, что при возникновении любой простой ошибки javascript с некоторым плохим кодом страница будет загружаться должным образом непрерывно (кроме, конечно, javascript, не работающего на странице).

РЕДАКТИРОВАТЬ # 2 : Перемещение всех тегов <script> вниз в хвосте <body> «исправляет» (ну, скрывает) эту ошибку, и страница отображается нормально. Пластырь.

Ответы [ 10 ]

2 голосов
/ 10 июля 2009

Firebug сообщает, что тег пуст, когда он запускается как пустой, поэтому может показаться, что один из ваших javascripts удаляет содержимое страницы.

Единственный способ узнать, какой из них - отключить их, а затем посмотреть, исчезнет ли проблема.

Кроме того, это может быть состояние гонки с этим документом. Я знаю, что у Google есть свой особый подход, но document.write таков 1995 год.

Firebug также поймал для меня ошибку в консоли:

 Expected identifier or string for value in attribute selector but found '#'.

Откуда это взялось, я не могу сказать.

Могу я также заметить, что у вас есть LOT встроенного JavaScript, и это, как правило, никогда не бывает хорошо.

Ленивая загрузка?

В качестве эксперимента вы можете попробовать ленивую загрузку javascript, то есть переместить все теги, которые делают это приемлемыми, вниз на страницу как можно ниже, чтобы они не останавливали загрузку и остановите рендеринг, но оставьте ссылки на таблицы стилей вверху.

Проблема, которую я видел раньше, но не могу вспомнить, когда

Когда вы транслируете свой контент javascript, сжатый с помощью PHP, он не передает никакой информации о длине контента. В некоторых случаях я видел это странное поведение.

Есть немного волшебной грязи, которую я помню, использовал, чтобы сделать это возможным:

ob_start;
ob_start('ob_gzhandler');

    // Gzipped code outputted here 

 $data = ob_get_clean; 
 header("Content-Length: " . strlen( $data )); 
 print $data;
 ob_end_flush;

Но это, вероятно, вряд ли поможет.

1 голос
/ 10 сентября 2010

У меня была та же самая проблема: полностью пустая страница без исходных текстов, за исключением IE, который отображал контур документа без костей. У меня также установлен TinyMCE, и я использую шаблонизатор Smarty.

Я использовал фильтр Smarty escape: 'htmlall' , который преобразовывал текстовое содержимое с поддержкой TinyMCE перед отображением. Как только я заменил прямой вызов PHP на htmlspecialchars, проблема исчезла.

Я предполагаю, что парсер TinyMCE попал в бесконечный рекурсивный цикл, и браузер выручил. Даже если вы не используете Smarty, возможно, стоит пропустить нефильтрованные данные в TinyMCE (конечно, в непроизводственной среде!), Чтобы посмотреть, поможет ли это. Если это так, то вы можете постепенно увеличивать фильтрацию, чтобы выяснить, с чем можно справиться, прежде чем у TinyMCE возникнет проблема.

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

У меня была точно такая же проблема. Страница нормально загружена в Firefox, но белый экран с видимым источником в Internet Explorer.

Вы не поверите, в чем проблема - в шаблоне я поместил закрывающий заголовок как </h1>

Таким образом, тег заголовка был похож на <title>My Website Title</h1>, и это заставило IE загрузить белую страницу, отлично в Firefox. Я изменил его на <title>My Website Title</title> - проблема решена!

Я обнаружил проблему при использовании W3C Validator. Я сомневаюсь, что это ваша та же проблема, но, возможно, это поможет вам понять, что может вызвать этот ответ от IE 7.

0 голосов
/ 11 ноября 2009

У меня были похожие проблемы с пустой страницей после инициализации крошечного, очевидно, это проблема doc.write. Я нашел эти предложения полезными:

http://tinymce.moxiecode.com/punbb/viewtopic.php?pid=55236

0 голосов
/ 16 августа 2009

Используйте правильный и документированный способ отложенной загрузки. Добавление элементов в тело на самом деле не является отложенной загрузкой, поскольку оно по-прежнему блокирует завершение рендеринга страницы до тех пор, пока сценарии не будут загружены, другими словами, событие загрузки не будет запущено, пока оно не завершится. Это просто способ заставить пользователя что-то увидеть до загрузки всех скриптов.

Используя этот метод: http://tinymce.moxiecode.com/examples/example_13.php

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

Также, если страница становится пустой, вам, вероятно, нужно отключить вызовы document.write, которые мы используем для синхронной загрузки скриптов. Для этого используйте параметр strict_loading_mode.

0 голосов
/ 10 июля 2009

Первое, что нужно попробовать, это отключить все ваши аддоны FireFox и посмотреть, исправит ли это это. Если это так, вы можете попытаться выяснить, какое дополнение вызывает это поведение, включив их по одному за раз.

0 голосов
/ 10 июля 2009

Я замечаю это на вашей странице:

    <script type="text/javascript">
    /* <![CDATA[ */
    tinyMCE_GZ.init({           
        doctype : '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
        plugins : 'style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,'+ 
            'searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras',
        themes : 'advanced',
        languages : 'en',
        disk_cache : false,
        debug : false                                   
    });
    </script>

    <script type="text/javascript" src="/js/tiny_mce/jquery.tinymce.js"></script>

Я не вижу закрывающей последовательности ]]> для завершения фрагмента CDATA. Если Firefox 3.5 иногда выбирает для анализа вашей страницы не в обычном режиме причуд, а в варианте, который учитывает структуру XML, это может быть вашей проблемой. (Эти разные решения по синтаксическому анализу вполне могут быть результатом синхронизации по сети и того, сколько HTML-кода поступает в браузер в одном пакете) Весь контент страницы окажется в блоке CDATA!

Один из способов проверить это - использовать вкладку «HTML» firebug и посмотреть, содержит ли структура документа весь исходный контент внутри тега script, который вызывает tinyMCE_GZ.init.

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

<script type="text/javascript">
/* <![CDATA[ */
tinyMCE_GZ.init({           
    doctype : '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
    plugins : 'style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,'+ 
        'searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras',
    themes : 'advanced',
    languages : 'en',
    disk_cache : false,
    debug : false                                   
});
/* ]]> */
</script>

<script type="text/javascript" src="/js/tiny_mce/jquery.tinymce.js"></script>

(Если это не очевидно, я добавил туда одну строку, содержащую /* ]]> */)

0 голосов
/ 10 июля 2009

Я могу воспроизвести это, действительно странно. единственная проблема, которую я замечаю, это то, что когда страница становится пустой, firebug показывает самозакрывающийся тег тела

В верхней части вашего кода довольно много javascript - вам все это нужно? Идентификатор удалите все это и затем добавьте это, одна функция за один раз и посмотрите, какая из них вызывает проблему. это определенно связано с JS.

0 голосов
/ 10 июля 2009

Я запустил «Page Speed ​​Activity» на вашем сайте, и каждый раз он занимал 6,5 секунды, а gzip tinyMCE занимал около 70% этого времени каждый раз. Я бы посоветовал поискать другой редактор, если вам не нужны все функции tinyMCE.

Вы смотрели на его младшего брата punyMCE?

Может быть что-то совершенно другое. Попробуйте сделать так, как предлагает Кент, с отключением одного JS за раз, чтобы найти источник ...

0 голосов
/ 10 июля 2009

Я старался изо всех сил в навигации, обновлении и в целом гадости с браузерами разных размеров на FF 3.5, но, честно говоря, не могу заставить ваш сайт исчезнуть! Это он отображается каждый раз.

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