Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не оторбражается изображение в Internet Explorer, после подмены атрибута .src 
V
    Опции темы
Royan
  Дата 23.10.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



Очень странное поведение наблюдаю в IE

Есть такой HTML код 

Код

<IMG id="myImage" src="<?php "http://localhost/genimage.php";?>">


Как нетрудно догадаться в файле "genimage.php" генерируется изображение. Причем каждый раз при обращении к "genimage.php" разное.

Я решил сделать так, чтобы при нажатии на ссылку это изображение менялось вот как тут: http://recaptcha.net/learnmore.html 

Правда я пошел более простым путем и просто написал такую функцию:

Код

    function reloadImage() {
        var oImg = document.getElementById("myImage");
        oImg.src = "<?php echo "http://localhost/genimage.php?r=";?>" + Math.random();
    }


Тут может плохо видно, но в общем при нажатии на некую кнопку по которой сменяется изображение происходит вызов reloadImage() внутри которого генерируется уникальный адрес изображения ("http://localhost/genimage.php?r=" + Math.random()). В общем этот метод работает в Firefox и Opera но не работает в IE в котором место изображения отображается белое пятно. При этом метод onload этого подгружаемого изображения (объекта Image) в IE ***не*** отрабатывает

Подскажите, пожалуйста, как мне исправить этот глюк? Может это вовсе не javascript'овый вопрос а проблема с хедарами которые выбрасывает PHP?

PS
При перезагрузке страницы изображение всегда отображается во всех браузерах


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Astraller
Дата 23.10.2007, 07:16 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: 2
Всего: 5



Royan, ужас. Изучите хотя-бы основы! PHP вы полняется на сервере и только на сервере!! Нельзя вставлять куски php скриптов в JS код.
В первом случае достаточно написать:
Код

<IMG id="myImage" src="http://localhost/genimage.php">

Во втором же случае тоже не надо мудрить с php!
Код

function reloadImage() {
var oImg = document.getElementById("myImage");
oImg.src = "http://localhost/genimage.php?r=" + Math.random();
}


И наконец запомните JavaScript это НЕ Java!  smile 


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
Royan
Дата 23.10.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



Astraller, Прошу прощения, я просто несколько модифицировал свой код перед отправкой вопроса на форум поэтому и получилось что в посте у меня нечто невразумительное. Тут только моя вина.
Дело в том что я изначально не сказал что код, который я привожу (в том числе и тот который я случайно пометил как Java) находится в PHP файле поэтому PHP вставки в JS код вполне себе легитимны. Посему ваши исправления это результат выполнения PHP кода.

Однако вопрос остается. 
Для пущего убеждения я написал маленький тест в котором демонстрируется баг/фича Internet Explorer
Код


<html>
  <head>
    <meta http-equiv=Content-Type content="text/html;charset=windows-1251">
  </head>
  <body>
    <script>
    function reloadImage() {
       var oImg = document.getElementById("myImage");
       oImg.src = "http://www.google.com/images/nav_logo3.png";
    }
    </script>

    <img id="myImage" src="http://forum.vingrad.ru/logo/logo.gif">
    <br/><br/>
    <a href="javascript:;" onClick="reloadImage()">Поменять изображение</a>
  </body>
</html>


Это сообщение отредактировал(а) Royan - 23.10.2007, 10:50


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
pompei
Дата 23.10.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.9.2007

Репутация: 1
Всего: 6



А про кэширование думали?

--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
Astraller
Дата 23.10.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: 2
Всего: 5



pompei, url'ы разные. Какое кеширование? smile 

PS Странно это. Я у себя на сайте подобным образом организовывал и все без проблем работает. smile 


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
Royan
Дата 23.10.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



Astraller, Если все таким же образом то я как Станиславский тебе скажу "Не верю!" Ты можешь привести URL сайта или способ которым ты это это реализовал?


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Astraller
Дата 23.10.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: 2
Всего: 5



Royan, в личку. Покажу. Проект просто коммерческий. smile


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
SelenIT
Дата 23.10.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Royan, попробовал Ваш пример. Результат было поставил меня в тупик своей нелогичностью: все срабатывало, при любых настройках кеширования... но только один раз: стоило почистить кеш и обновить страницу по Ctrl+F5 - все ломалось, по нажатию ссылки браузер не делал ничего, никакого запроса на сервер (смотрел плагином IeHttpHeaders). Обратил внимание, что ссылка подсвечивается как посещенная, подумал, что дело в этом, очистил history - не помогло. И тут обратил внимание на, мягко говоря, нестандартный адрес ссылки;). Стоило заменить адрес на более традиционную "решетку" - все заработало. С добавлением "return !1" в onclick в исходном варианте - тоже.

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


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Royan
Дата 23.10.2007, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



SelenIT, Тебе абсолютно заслуженный плюс.
Замечу, однако, что если убрать атрибут href вообще, то все тоже будет работать... вот такие вот дела


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
SelenIT
Дата 23.10.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(Royan @  23.10.2007,  20:04 Найти цитируемый пост)
если убрать атрибут href вообще, то все тоже будет работать...

Это как раз, имхо, не удивительно: <a> без href - это просто строчный элемент (как <span>), не вызывающий никаких переходов. А вот "невидимый виртуальный переход" по javascript-ссылке - действительно загадка...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Royan
Дата 23.10.2007, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



То что я прочитал по этому поводу в совокупности можно описать так. Переход по псевдо протоколу javascript: ставит IE в состояние "ожидания адресации" (pending navigation). В этом состоянии он находится до тех пор пока не происходит его адресация (возможно тут имеет место просто поступление любых данных из JS) Так вот в этом состоянии различная функциональность перестает работать либо перестает работать как ей предписано. В частности как мы убедились перестает работать механизм подгрузки и отображения изображений. То есть это особое состояние в котором поведение браузера не определено.




--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
SelenIT
Дата 23.10.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Royan, спасибо, кажется, я тоже нашел:
Цитата(Richard Cornford)

IE treats the activation of a javascript
pseudo-protocol HREF as navigation, and when used the browser goes into
a 'waiting state' pending the arrival of a replacement for the content.
In this state many previously available browser facilities are
withdrawn, including GIF animation and image swapping.

The normal strategy for dealing with this issue is to never use a
javascript pseudo-protocol HREF that will not result in the replacement
of the contents of the current page (so never to execute a function for
its side effect).


В моем приблизительном переводе:
Цитата

IE воспринимает активацию псевдопротокола javascript: как переход по ссылке, при этом браузер переходит в состояние ожидания поступления нового контента на замену текущему. В этом состоянии многие возможности браузера отключаются, в т.ч. GIF-анимация и смена картинок.

Обычная стратегия для обхода этой проблемы - никогда не использовать href="javascript:...", не приводящих к замене содержимого текущей страницы (т.е. не вызывать функцию ради побочного эффекта).


Имхо, логично. Корнфорд, все-таки, голова!

Вот так объединенными усилиями мы действительно докопались до истины! smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Astraller
Дата 24.10.2007, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: 2
Всего: 5



SelenIT
Цитата

Обычная стратегия для обхода этой проблемы - никогда не использовать href="javascript:...", не приводящих к замене содержимого текущей страницы (т.е. не вызывать функцию ради побочного эффекта).

А как быть с Opera которая иногда обновляет страницу при переходепо href="#"?? И при этом естественно не выполняется onClick smile 


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
SelenIT
Дата 24.10.2007, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Astraller
Цитата(Astraller @  24.10.2007,  07:59 Найти цитируемый пост)
иногда обновляет

Можно уточнить - какие версии, при каких настройках?

Цитата(Astraller @  24.10.2007,  07:59 Найти цитируемый пост)
как быть

Имхо, стандартно - onclick="doSomething();return!1" (или return doSomething() с return false в самой ф-ции - как удобнее).



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Astraller
Дата 24.10.2007, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: 2
Всего: 5



SelenIT, ааа.... тьфу :( return то я изабыл. Сори. Беру свои слова в зад.


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0964 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.