Страницы: 1
Добрый вечер. Вот появился вопрос, ответа пока не нашел... Может кто знает подскажите. Как и можно ли это вообще сделать, при помощи скрипта проверять отключена ли у посетителя при заходе на сайт графика в браузере.
За ранее спасибо.
Отсутствует
Можно. Сохраните изображение 1x1 пиксел в формате GIF, включите его в слой, например, с visibility: hidden; (если Вы примените display: none; , могут быть проблемы с некоторыми версиями Opera - изображение не загрузится в любом случае, разве что у пользователя будут отключены стили, но включены скрипты и изображения, что большая редкость), и пользуйтесь обработчиками onError и onLoad - например, можно назначить значение переменной в head и переопределить в обработчике. Если нужно объяснить подробнее, дайте знать.
Отсутствует
Можно. Сохраните изображение 1x1 пиксел в формате GIF, включите его в слой, например, с visibility: hidden; (если Вы примените display: none; , могут быть проблемы с некоторыми версиями Opera - изображение не загрузится в любом случае, разве что у пользователя будут отключены стили, но включены скрипты и изображения, что большая редкость), и пользуйтесь обработчиками onError и onLoad - например, можно назначить значение переменной в head и переопределить в обработчике. Если нужно объяснить подробнее, дайте знать.
Извини, но я ничего совсем не понял... Мне нужно знать когда посетитель заходит на мой сайт в этот момент у него графика включена или выключена? А зачем слой с 1px гифом я так и не понял.
Отсутствует
Ну, например, если обработчик onload 1х1 гифа не сменил значение переменной, то значит графика отключена
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
Только этот слой должен быть в коде в самом начале документа.
Можно смотреть значения двух переменных - переопределяемой в onLoad и в onError.
да теперь я понял, если тебя не затруднит приведи код своего решения, что бы окончательно понять. Саму мысль я понял, а вот как это реализовать в виде кода, пока что то не выходит, может я не совсем правильно понял суть выполнения скрипта...
Отсутствует
Можно на самом деле сделать еще проще:
<script language="JavaScript" type="text/javascript"> <!-- var imagesOn=false; var img1src='images/spacer.gif'; var img1=new Image(); img1.onerror=function (evt) {imagesOn=false; alert(this.src+" can't be loaded.");} img1.onload=function (evt) {imagesOn=true; alert(this.src+" was loaded.");} img1.src=img1src; //--> </script>
это нужно поместить внутрь head. Предполагается, что spacer.gif лежит внутри подпапки images и является изображением GIF 1x1 пиксел с 1 или 2 цветами в палитре. Предупреждение! значение переменной imagesOn будет доступно НЕ СРАЗУ после обработки кода, если Вы хотите им пользоваться, выставляйте setTimeout или вызывайте скрипт из onLoad тэга body.
Поскольку Вам нужна только переменная, а не оповещение, код будет выглядеть так:
<script language="JavaScript" type="text/javascript"> <!-- var imagesOn=false; var img1src='images/spacer.gif'; var img1=new Image(); img1.onerror=function (evt) {imagesOn=false;} img1.onload=function (evt) {imagesOn=true;} img1.src=img1src; //--> </script>
Обратите внимание, никакого слоя не нужно, только скрипт.
Или, если мы с Вами решим уважать Internet Explorer, код нужно переделать так:
<script language="JavaScript" type="text/javascript"> <!-- var imagesOn=false; function imgIsLoadedAlert(thisSrc) { alert(thisSrc+((imagesOn)?" is":" can't be")+" loaded"); } function imgIsLoaded() { imagesOn=true; imgIsLoadedAlert(this.src); } function imgWasNotLoaded() { imagesOn=false; imgIsLoadedAlert(this.src); } var img1src='images/spacer.gif'; var img1=new Image(); img1.onerror=imgWasNotLoaded; img1.onload=imgIsLoaded; img1.src=img1src; //--> </script>
или без оповещения:
<script language="JavaScript" type="text/javascript"> <!-- var imagesOn=false; function imgIsLoaded() {imagesOn=true;} function imgWasNotLoaded() {imagesOn=false;} var img1src='images/spacer.gif'; var img1=new Image(); img1.onerror=imgWasNotLoaded; img1.onload=imgIsLoaded; img1.src=img1src; //--> </script>
в современных браузерах работают оба варианта, но из-за ошибки в Internet Explorer второй вариант (с imgIsLoaded и imgWasNotLoaded) работает гораздо быстрее первого (при повторной загрузке страницы... точнее, первый работает гораздо медленнее второго).
Протестировал в 9 браузерах, в том числе в нескольких версиях Internet Explorer (начиная с 5.0, в 4.0 не тестировал), современном Netscape, Mozilla Firefox и Mozilla, Opera (начиная с 7.01 по 9.0TP2), Flock. Везде работает. В Konqueror собираюсь проверить позже.
Отсутствует
Страницы: 1