Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Так есть или нет innerHTML в теге <OBJECT> и DOM-объекте типа OBJECT? (https://javascript.ru/forum/events/17816-tak-est-ili-net-innerhtml-v-tege-object-i-dom-obekte-tipa-object.html)

Маэстро 03.06.2011 18:45

Так есть или нет innerHTML в теге <OBJECT> и DOM-объекте типа OBJECT?
 
Я уже запутался с этими броузерами и документами, описывающими возможности innerHTML. Прошу вашего внимания.
Провожу простой тест:
var a=document.createElement('DIV');
var b=document.createElement('OBJECT');
a.innerHTML='blablabla';
b.innerHTML='blablabla';

Что имеем? Ну с DIV_ом всё понятно, всё хорошо.
А вот с объектом типа 'OBJECT' в разных броузерах:

Google Hrome (11.0) - Отлично! всё работает!
FireFox (4.0.1) - работает. но есть нюансы.
Opera (11.11) - BAD.
IE (8.0) - BAD. вызывает ошибку!

Есть надежда, что в следующих версиях броузеров это будет работать?
Хотя вроде оно и так должно работать, потому как написано:
The property is read/write for all objects except the following, for which it is read-only: COL, COLGROUP, FRAMESET, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR.

dmitriymar 03.06.2011 19:25

вставляй инфу через инер сразу с тегом OBJECT

Маэстро 03.06.2011 19:54

Цитата:

Сообщение от dmitriymar (Сообщение 107269)
вставляй инфу через инер сразу с тегом OBJECT

Этот вариант я знаю. Работает в Google Chrome, Opera, FireFox.
В IE опять же проблемы...

Кстати, интересная злостная статья на тему почему НЕ НАДО использовать innerHTML:
http://www.javascriptkata.com/2007/0...-html-objects/

dmitriymar 03.06.2011 20:20

Цитата:

Сообщение от Маэстро
В IE опять же проблемы...

у меня в ие проблем не наблюдалось. доктайп посмотри

Маэстро 03.06.2011 20:28

dmitriymar, понимаете... проблемы такие, что я даже затрудняюсь описать их словами. Вы, думаю догадались, что OBJECT - это Adobe Flash Player (type="application/x-shockwave-flash")
Так вот это дело вроде и работает.. но периодически не работает (на одном и том же коде и при одних и тех же параметрах). Выражается это внешне в так, что как будто бы Flash "недогрузился" и перестает реагировать на любые события. Этот феномен повторяется нестабильно, не за что зацепиться. Он то есть, то нет. И такое только в IE.

dmitriymar 03.06.2011 20:37

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

Маэстро 03.06.2011 20:40

вот еще, что забыл сказать. Все же обнаружил закономерность, которую не могу объяснить:
п.1. Открываю чистый броузер IE, захожу на страницу - Flash работает.
п.2. Обновляю страницу (F5) - Flash не работает! и после последующих нажатий F5 тоже не работает.
п.3. Закрываю полностью броузер
далее всё повторяется с первого пункта.
аналогичный эффект при открытии страницы в другой закладке одного и того же броузера.

а доктайп... знаете, мож я и не прав, но я привык испытывать в первую очередь всё без доктайпа. объясню почему: мой скрипт предполагается быть внедренным на других (чужих сайтах). и я не смогу заставить людей менять его на своих серверах. поэтому оно должно работать при любом доктайпе.

dmitriymar 03.06.2011 20:58

плеер поменять попробуй.
http://flv-mp3.com/ru/

Маэстро 03.06.2011 22:05

Цитата:

Сообщение от dmitriymar (Сообщение 107279)
плеер поменять попробуй.
http://flv-mp3.com/ru/

1. Плеер менять не буду. Я слишком долго его выбирал и поисследовал наверное с два десятка. flv-mp3.com - лучшим не считаю.

2. Но я таки нашел решение вышеописанной проблемы.
И хоть некоторые тут обвиняли меня в занятиях "магией", но с IE иногда без бубна просто не канает.
Следите за моей мыслью ;)
Если фокусы с подвисанием плеера происходят при запуске броузера и последующем обновлении, то скорее всего это как-то связано с кешированием в броузере, так? Тем более, что давно заметил, что кеширование в IE наиболее тупое. Классические строчки в заголовке страницы типа:
<meta http-equiv="Expires" content="Thu, 01 Dec 1991 01:00:00 GMT">
<meta http-equiv="Pragma" content="no-cache">
-не помогает!
И тогда я рискнул и воспользовался технологией борьбы с кешированием, используемую при работе с XMLHttpRequest и добавил в плеере в путь к файлу *.swf случайный параметр для борьбы с кешированием
?nocache='+Math.random()
Причем достаточно поставить это в секцию data="...", а в секцию
<param name="movie" value="..." />
-не обязательно.
И свершилось чудо. IE работает стабильно и прогнозируемо!
Немного беспокоит, что у пользователя при обновлении страницы будет каждый раз загружаться swf-файл по-новой, но это ерунда, т.к. он всего 13K.

3. Открытая мною тема (в заголовке) всё же в силе.

dmitriymar 03.06.2011 23:34

погодь. а без аякс ты не пробовал менять содержимое объект?

Маэстро 04.06.2011 11:39

Цитата:

Сообщение от dmitriymar (Сообщение 107294)
погодь. а без аякс ты не пробовал менять содержимое объект?

Пробовал. Но о каком "объекте" сейчас вопрос? Если буквально о типе OBJECT, то результаты я описал в самом первом посте темы.
Если речь об объекте Adobe Flash Player (внедренном в свою очередь в объект OBJECT), то без аякса работает. Но у меня ситуация сложнее: грузится страница сайта и уже в процессе ее загрузки запускается аякс, который в свою очередь грузит Flash... который.... которого... в доме который построил Джек ;)
только не спрашивайте меня, зачем так сложно. могу только сказать, что именно в такой ситуации IE "путается". остальные броузеры нормально понимают чего от них хотят.

dmitriymar 04.06.2011 12:59

о флеше спрашивал. у меня замена содержимого в объекте через inner в фф пару месяцев назад отказалась работать.точнее замена была -работы не было. так что только про ие утверждение спорное

Маэстро 04.06.2011 13:31

Цитата:

Сообщение от dmitriymar (Сообщение 107308)
... через inner в фф пару месяцев назад отказалась работать..

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

Маэстро 04.06.2011 13:50

И вот что еще вспомнил к предыдущему. В самом начале я говорил, что в FF есть нюансы... эти нюансы могут быть для Вас решающими.
Как Вы создаете тот DIV, в который вставляется OBJECT flash?
Есть два варианта:
1.
<div id="mama"></div>
var a = document.getElementById('mama');
a.innerHTML='....FLASH...';

2.
var a = document.createElement('mama');
кудато.appendChild(a);
a.innerHTML='....FLASH...';

Вроде бы по сути одно и то же. Но первый вариант в FF работает, второй - нет.
И еще одно примечание: материнский DIV "mama" на момент внедрения FLASH должен быть видимым! Иначе FLASH работать не будет. Почему? - надо спросить у Adobe.

Slavenin 04.06.2011 13:53

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

header('Cache-Control: no-cache, must-revalidate');
 header('Cache-Control: post-check=0,pre-check=0', false);
 header('Cache-Control: max-age=0', false);
 header('Pragma: no-cache');

Маэстро 04.06.2011 15:28

Цитата:

Сообщение от Slavenin (Сообщение 107316)
случайный параметр в строке это не лучший выход. просто отправляйте браузеру нужные заголовки и проблема будет решена

header('Cache-Control: no-cache, must-revalidate');
 header('Cache-Control: post-check=0,pre-check=0', false);
 header('Cache-Control: max-age=0', false);
 header('Pragma: no-cache');

Вы привели пример принудительной оправки заголовков из PHP.
А как их формировать, если с сервера отправляется файл *.txt? *.js? *.swf? Делать настройку файла .htaccess как мы обсуждали в теме http://javascript.ru/forum/ajax/2643-kodirovka.html ?
А если *.swf загружается с чужого сервера, то... просить админов чужого сервера внести настройки в их сервер для меня? ;)

Slavenin 04.06.2011 19:13

ну дак шлите эти заголовки axaj;)
xmlhttp.setRequestHeader('Cache-Control', 'no-cache, must-revalidate');

Маэстро 09.06.2011 14:27

Цитата:

Сообщение от Slavenin (Сообщение 107340)
ну дак шлите эти заголовки axaj;)
xmlhttp.setRequestHeader('Cache-Control', 'no-cache, must-revalidate');

Скажите, а Вы на ПРАКТИКЕ проверяли то, что советуете?
Утверждаю, что в IE 8 это не работает! а у Вас?

Давайте пофилософствуем на эту тему. В вопросах кеширования сервер посылает заголовки броузеру, чтобы он (броузер) понял как ему поступать.
А что получается в Вашем варианте? Вы из броузера посылаете заголовок серверу (по поводу кеширования). И... что дальше? ;)


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