Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Траблы в Опере (https://javascript.ru/forum/offtopic/29069-trably-v-opere.html)

Deff 13.06.2012 20:08

Траблы в Опере
 
Как то необходимо было распарсить ссылки на смайлики в коде страницы юзера и убрать повторения
Смайлов была масса: Попытался сделать парсинг через innerHTML,

Наткнулся на трабл
Трабл во всех Операх начиная c 11.6

Код парс скрипта(сокращен до минимума
Код:
[HTML]<script>
/******** Парсер img ***********/

elm=document.getElementById("pun-main").getElementsByTagName("div")
for(x in elm) if(elm[x].className=="post-content"){
var post=elm[x]
post.innerHTML=post.innerHTML
}
</script>


Эффект возникает при большом кол-ве картинок (общей длинной кода более 20 000знаков
После перепарса текст перепарсенного преобразуется в HTML

Скриншот:



Рабочий тест http://hostjs-mybb2011.narod.ru/opera11-6-Trabl.htm

Gozar 13.06.2012 20:53

Чё должно быть и какой эффект?

devote 13.06.2012 21:14

нифига не понял если честно

Deff 13.06.2012 21:24

Цитата:

Сообщение от devote
нифига не понял если честно

В блоке Код - Текст- при парсе через innerHTML и возврате на страницу , текст превращается в HTML код, начинают работать из текста скрипты, и остальные коды HTML
Вот скрин как должно выглядеть:


А вот как выглядит в Опере:

Gozar 13.06.2012 21:46

Ненавижу тестовые сайты на бесплатных хостингах и людей, которые их делают недолюбливаю.

А ещё вёрстку сначала нормальную сделай! Где у тебя открывается тег textarea?

Ps: я такого количества открывающих div никогда в жизни не видывал. А тестовые примеры нужно делать маленькими.

Deff 13.06.2012 21:52

Gozar,
я урезал спецом до минума работоспособности -тегов техtarea - там нет - там контент тегов уже преобразован в текст сервером, как и на любом форуме
ти пишешь
<style> - но у тьву страница не схлопываецо, поскольку угловые скобки все преобразуются!

Там техт - обычный текст,в коде много &lt;img - угловые кавычки из текста в Опере при проходе парсера почему то преобразуются из &lt; в <

сам парсер post.innerHTML=post.innerHTML (*спецом убрал из него все replace

Amphiluke 13.06.2012 22:08

post.innerHTML=post.innerHTML.replace(/</g, "&lt;").replace(/>/g, "&gt;");

:D

Deff 13.06.2012 22:11

Amphiluke,
Откройте исходник страницы

Amphiluke 13.06.2012 22:11

Открыл. И?

Deff 13.06.2012 22:15

Amphiluke,
В блоке код - нет тегов
Страницу нун смотреть под Оперой( версии 11.6 и далее) и сравнивать в ином браузере

Amphiluke 13.06.2012 22:20

Вы когда считываете свойство innerHTML, Opera, похоже, преобразует сущности в символы. Назначая обратно innerHTML, вы уже назначаете код с тегами. Поэтому я предложил вам этот вариант.

По крайней мере, когда я заменяю ваш код
Цитата:

post.innerHTML=post.innerHTML

на

post.innerHTML=post.innerHTML.replace(/</g, "&lt;")


то код вываливается на страницу как есть и в opera тоже.

Deff 13.06.2012 22:33

Amphiluke,
Она не преобразует, пока колво символов менее 12тыщ, не преобразует если и сокращать кол-во текстового кода картинок
не преобразует и во всех версиях до 11.6
Собственно интересно может кто зает механизм, ксать на многих сайтах есть подобный распарс контента в топиках
Т.е если воткнуть много картиночные теги, скрыть спойлером, даб не привлекать сходу модеров, то можно запустить собственный скрипт
для Oперников...

Amphiluke 13.06.2012 22:33

Вы просто сами посмотрите перед тем как устанавливать свойство innerHTML:

alert(post.innerHTML.indexOf("&lt;")); // -1 !

Deff 13.06.2012 22:49

Amphiluke,
Я не о себе беспокоюсь - есть эффект, мну увидел, что подобной методой elem.innerHTML=elem.innerHTML.replace(что-то,на что-то) пользуюсь не ток я, сходил на оффсайт Opera, написал - два -три баг репорта -(февраль - воз и ныне там) ну пишу тут дабы знали

devote 14.06.2012 15:04

Вышла Опера 12 Final - долгожданная финалка 12-й оперы.. качайте, читайте: http://my.opera.com/russian/blog/201...opera-12-final

Deff 14.06.2012 15:07

devote,
Ксать там в 12 вродь исправлен баг с загрузкой шрифтов при русскоязычной папке установки оперы

devote 14.06.2012 15:11

Цитата:

Сообщение от Deff
Ксать там в 12 вродь исправлен баг с загрузкой шрифтов при русскоязычной папке установки оперы

да исправлен, я об этом где-то тут писал уже.

Deff 14.06.2012 15:13

Ыыы :lol: А данный баг топика - остался

Gozar 14.06.2012 23:23

Цитата:

Сообщение от devote
Вышла Опера 12 Final

Уряяяяя! Пойду напьюсь(кофе).


Часовой пояс GMT +3, время: 13:32.