Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: Общие вопросы > Не оторбражается изображение в Internet Explorer |
Автор: Royan 23.10.2007, 00:04 | ||||
Очень странное поведение наблюдаю в IE Есть такой HTML код
Как нетрудно догадаться в файле "genimage.php" генерируется изображение. Причем каждый раз при обращении к "genimage.php" разное. Я решил сделать так, чтобы при нажатии на ссылку это изображение менялось вот как тут: http://recaptcha.net/learnmore.html Правда я пошел более простым путем и просто написал такую функцию:
Тут может плохо видно, но в общем при нажатии на некую кнопку по которой сменяется изображение происходит вызов reloadImage() внутри которого генерируется уникальный адрес изображения ("http://localhost/genimage.php?r=" + Math.random()). В общем этот метод работает в Firefox и Opera но не работает в IE в котором место изображения отображается белое пятно. При этом метод onload этого подгружаемого изображения (объекта Image) в IE ***не*** отрабатывает Подскажите, пожалуйста, как мне исправить этот глюк? Может это вовсе не javascript'овый вопрос а проблема с хедарами которые выбрасывает PHP? PS При перезагрузке страницы изображение всегда отображается во всех браузерах |
Автор: Astraller 23.10.2007, 07:16 | ||||
Royan, ужас. Изучите хотя-бы основы! PHP вы полняется на сервере и только на сервере!! Нельзя вставлять куски php скриптов в JS код. В первом случае достаточно написать:
Во втором же случае тоже не надо мудрить с php!
И наконец запомните JavaScript это НЕ Java! ![]() |
Автор: Royan 23.10.2007, 10:50 | ||
Astraller, Прошу прощения, я просто несколько модифицировал свой код перед отправкой вопроса на форум поэтому и получилось что в посте у меня нечто невразумительное. Тут только моя вина. Дело в том что я изначально не сказал что код, который я привожу (в том числе и тот который я случайно пометил как Java) находится в PHP файле поэтому PHP вставки в JS код вполне себе легитимны. Посему ваши исправления это результат выполнения PHP кода. Однако вопрос остается. Для пущего убеждения я написал маленький тест в котором демонстрируется баг/фича Internet Explorer
|
Автор: pompei 23.10.2007, 11:29 |
А про кэширование думали? |
Автор: Astraller 23.10.2007, 12:35 |
pompei, url'ы разные. Какое кеширование? ![]() PS Странно это. Я у себя на сайте подобным образом организовывал и все без проблем работает. ![]() |
Автор: Royan 23.10.2007, 14:53 |
Astraller, Если все таким же образом то я как Станиславский тебе скажу "Не верю!" Ты можешь привести URL сайта или способ которым ты это это реализовал? |
Автор: Astraller 23.10.2007, 15:09 |
Royan, в личку. Покажу. Проект просто коммерческий. ![]() |
Автор: SelenIT 23.10.2007, 18:04 |
Royan, попробовал Ваш пример. Результат было поставил меня в тупик своей нелогичностью: все срабатывало, при любых настройках кеширования... но только один раз: стоило почистить кеш и обновить страницу по Ctrl+F5 - все ломалось, по нажатию ссылки браузер не делал ничего, никакого запроса на сервер (смотрел плагином IeHttpHeaders). Обратил внимание, что ссылка подсвечивается как посещенная, подумал, что дело в этом, очистил history - не помогло. И тут обратил внимание на, мягко говоря, нестандартный адрес ссылки;). Стоило заменить адрес на более традиционную "решетку" - все заработало. С добавлением "return !1" в onclick в исходном варианте - тоже. Загадочная все-таки это вещь - псевдопротокол "javascript:", непостижимый ни для одного стандарта. Невидимый переход браузера между невидимыми мирами... |
Автор: Royan 23.10.2007, 20:04 |
SelenIT, Тебе абсолютно заслуженный плюс. Замечу, однако, что если убрать атрибут href вообще, то все тоже будет работать... вот такие вот дела |
Автор: SelenIT 23.10.2007, 20:16 |
Это как раз, имхо, не удивительно: <a> без href - это просто строчный элемент (как <span>), не вызывающий никаких переходов. А вот "невидимый виртуальный переход" по javascript-ссылке - действительно загадка... |
Автор: Royan 23.10.2007, 22:03 |
То что я прочитал по этому поводу в совокупности можно описать так. Переход по псевдо протоколу javascript: ставит IE в состояние "ожидания адресации" (pending navigation). В этом состоянии он находится до тех пор пока не происходит его адресация (возможно тут имеет место просто поступление любых данных из JS) Так вот в этом состоянии различная функциональность перестает работать либо перестает работать как ей предписано. В частности как мы убедились перестает работать механизм подгрузки и отображения изображений. То есть это особое состояние в котором поведение браузера не определено. |
Автор: SelenIT 23.10.2007, 22:25 | ||||
Royan, спасибо, кажется, я тоже http://groups.google.com/group/comp.lang.javascript/tree/browse_frm/thread/29f5250ebcbfca76/ed05d2132efcf609?rnum=1&_done=%2Fgroup%2Fcomp.lang.javascript%2Fbrowse_frm%2Fthread%2F29f5250ebcbfca76%2Fed05d2132efcf609%3Ftvc%3D1%26#doc_afbceca4dd685741:
В моем приблизительном переводе:
Имхо, логично. Корнфорд, все-таки, голова! Вот так объединенными усилиями мы действительно докопались до истины! ![]() |
Автор: Astraller 24.10.2007, 07:59 | ||
SelenIT,
А как быть с Opera которая иногда обновляет страницу при переходепо href="#"?? И при этом естественно не выполняется onClick ![]() |
Автор: SelenIT 24.10.2007, 08:06 |
Astraller, Можно уточнить - какие версии, при каких настройках? Имхо, стандартно - onclick="doSomething();return!1" (или return doSomething() с return false в самой ф-ции - как удобнее). |
Автор: Astraller 24.10.2007, 08:44 |
SelenIT, ааа.... тьфу :( return то я изабыл. Сори. Беру свои слова в зад. |
Автор: NNaarreekk 28.10.2007, 00:35 |
Лучше сделать чтоб при наведении на обект курсор становился рукой. И в статусе чисто, и таких проблем не возникнет.... |
Автор: SelenIT 28.10.2007, 00:44 |
NNaarreekk, и еще чтоб цвет менялся и подчеркивание появлялось/исчезало, как у ссылки ![]() Вообще, в принципе, здраво. Единственное "но" - иногда ссылка незаменима, когда нужна базовая функциональность при отключенном JS... |
Автор: NNaarreekk 3.11.2007, 00:29 |
Да если JS отключен то сайт вообше не будет работать... Правда для этого можно ставить проверку на включенность. |