JavaScript заменяет document.write (ln) на исправление jquery - PullRequest
0 голосов
/ 30 сентября 2010

Серьезно неполноценное и запаздывающее программное обеспечение под названием «Joomla» вызывает у меня обычную нагрузку от головной боли.

Пример кода

Iиметь следующий код:

<!-- .... -->
<div id="abc"><!----></div>
<script type="text/javascript">
    jQuery.get(url, function(data){
        jQuery('#abc').html(data);
    }, 'data');
</script>
<!-- .... -->

И я получаю этот код из этого URL:

<!-- .... -->
<script type="text/javascript">
   document.write('<span');
   // perhaps write classes
   document.write('>');
   // and the rest of the code
</script>
<!-- .... -->

Проблема

Joomla в настоящее время современный с использованием document.write фрагментов.Это полностью уничтожает любой AJAX html, если я не отключаю / удаляю javascript, который является огромным НЕТ.

Исправление

Мне нужно постепенно заменять текст / кодчтобы выглядеть так:

<span id="ob1"><!----></span>
<script type="text/javascript">
   _ob_begin(1);
   _ob_write(1, '<span');
   // perhaps write classes
   _ob_write(1, '>');
   // and the rest of the code
   _ob_end(1);
</script>

Разъяснение

Любители Joomla, не подходите близко к этой теме.Сейчас я чувствую, что хочу сжечь живого разработчика Joomla.

Сгенерированный код (document.write) строго выполняется Joomla ... никаких плагинов, компонентов или чего-либо еще.

Ответы [ 3 ]

12 голосов
/ 02 октября 2010

Один из способов - найти и заменить, используя Блокнот программистов 2, для всех файлов в этой папке, заканчивающихся на .js. Это может помочь достичь «если я не отключу / уберу JavaScript, который является огромным НЕТ.»

8 голосов
/ 30 сентября 2010

Можно перезаписать document.write своей собственной функцией, которая буферизует выводимый текст и после задержки записывает его в innerHTML некоторого элемента.Это не совсем надежно, но может охватить много общих случаев.

Однако вы не можете загрузить <script> контент, написав его с innerHTML / html()).load() в jQuery пытается обойти некоторые проблемы, но она принципиально разбита, даже до проблемы с document.write (что действительно грязно).

Вы можете попытаться написатьсодержимое innerHTML, выберите элементы script, замените их на пустые элементы div и eval() их текст (это то, что load() пытается сделать, но не совсем успешно), с переопределением document.writeбросить завершенный вывод в div.Но это будет грязно и ненадежно.Я не знаю, каков ваш вариант использования, но почти наверняка есть лучший подход, чем этот.

6 голосов
/ 30 сентября 2010

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

Но в PHP быстрое исправление 'n' может быть output buffering, вы можете использовать его, чтобы перехватить все содержимое страницы, сделать там свою магию и затем вывести ее в браузер.Так что в вашем случае вы могли бы использовать его для поиска / замены / удаления файла document.write.

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

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