Консультация № 178532
20.05.2010, 22:00
42.80 руб.
0 8 1
Здравствуйте уважаемые эксперты!

Нашел скрипт добавления страницы в закладки, помогите пожалуйста его подробно прокомментировать(в описании видел только замечание, что в IE 6 он не работает):

<script type="text/javascript">
function getBrowserInfo() {
var t,v = undefined;
if (window.opera) t = 'Opera';
else if (document.all) {
t = 'IE';
var nv = navigator.appVersion;
var s = nv.indexOf('MSIE')+5;
v = nv.substring(s,s+1);
}
else if (navigator.appName) t = 'Netscape';
return {type:t,version:v};
}

function bookmark(a){
var url = window.document.location;
var title = window.document.title;
var b = getBrowserInfo();
if (b.type == 'IE' && 7 > b.version && b.version >= 4) window.external.AddFavorite(url,title);
else if (b.type == 'Opera') {
a.href = url;
a.rel = "sidebar";
a.title = url+','+title;
return true;
}
else if (b.type == "Netscape") window.sidebar.addPanel(title,url,"");
else alert("Ia?ieoa CTRL-D, ?oiau aiaaaeou no?aieoo a caeeaaee.");
return false;
}
</script>

Я понимаю так:
//функция получения информации о браузере
function getBrowserInfo() {
// t - тип , v - версия, а что такое undefined?
var t,v = undefined;
if (window.opera) t = 'Opera'; //если опера, переменной t присваиваем значение "Opera"
else if (document.all) { //здесь не совсем понятно, почему сразу IE
t = 'IE';
var nv = navigator.appVersion; //?
var s = nv.indexOf('MSIE')+5; //?
v = nv.substring(s,s+1); //?
}
else if (navigator.appName) t = 'Netscape'; //тут тоже непонятно как определяется НетСкейп
return {type:t,version:v};
}

//функция добавления в закладки
function bookmark(a){
var url = window.document.location; //ссылка
var title = window.document.title; //описание
var b = getBrowserInfo(); //вызов функции определения браузера
if (b.type == 'IE' && 7 > b.version && b.version >= 4) window.external.AddFavorite(url,title); //?external?
//в другом случае это Опера
else if (b.type == 'Opera') {
a.href = url;
a.rel = "sidebar"; //что здесь делает rel?
a.title = url+','+title;
return true;
}
else if (b.type == "Netscape") window.sidebar.addPanel(title,url,"");
else alert("Ia?ieoa CTRL-D, ?oiau aiaaaeou no?aieoo a caeeaaee.");
return false;
}

Я так понял для разных браузеров разные функции? И подскажите пожалуйста как правильно обращаться к этому скрипту: <a href="javascript: а далее?">В закладки</a>

Спасибо большое!

Обсуждение

давно
Профессор
230118
3054
20.05.2010, 22:05
общий
Мироненко Николай Николаевич:
undefined - это неопределенное значение, аналогичное Null в других языках.
Неизвестный
20.05.2010, 22:11
общий
Гаряка Асмик:
Понял
давно
Профессор
230118
3054
20.05.2010, 22:20
общий
if (document.all) используется, потому что это свойство есть в IE. Но его не советуют применять, так как другие браузеры тоже могут это поддерживать. Это можно было делать до 5 версии IE.
Вот скрипт, который определяет это
// Получим userAgent браузера и переведем его в нижний регистр
var ua = navigator.userAgent.toLowerCase();
// Определим Internet Explorer
isIE = (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1);
// Opera
isOpera = (ua.indexOf("opera") != -1);
// Gecko = Mozilla + Firefox + Netscape
isGecko = (ua.indexOf("gecko") != -1);
// Safari, используется в MAC OS
isSafari = (ua.indexOf("safari") != -1);
// Konqueror, используется в UNIX-системах
isKonqueror = (ua.indexOf("konqueror") != -1);
// Простая проверка с помощью document.write
document.write(
"isIE = " + isIE + "
" +
"isOpera = " + isOpera + "
" +
"isGecko = " + isGecko + "
" +
"isSafari = " + isSafari + "
" +
"isKonqueror = " + isKonqueror + "
"
давно
Профессор
230118
3054
20.05.2010, 22:45
общий
Мироненко Николай Николаевич:
a.rel = "sidebar";
a представляет собой гиперссылку. Ее атрибут rel показывает отношение цели ссылки к данному документу. Например, sidebar означает, что ссылка должна открываться в боковой панели.
Этот атрибут поддерживается в IE 7 и 8, FF2 и 3, Safari 3
В общем, этот скрипт написан давно, и можно сейчас использовать этот метод для всех браузеров. Netscape сейчас практически не используется.
давно
Профессор
230118
3054
20.05.2010, 23:01
общий
windows.external - это объект, позволяющий внутреннему компоненту IE общаться с самим приложением (на базе этого компонента каждый может создать свой браузер, и пример есть в VS). И среди методов есть AddFavorite, позволяющий создать закладку.
давно
Профессор
230118
3054
20.05.2010, 23:56
общий
это ответ
Здравствуйте, Мироненко Николай Николаевич.

Обращаться к скрипту надо так <a href="javascript:bookmark(this)">Добавить в закладки</a>. Но функция не работает для локальных файлов, а только по протоколу Http.
undefined - это неопределенное значение, аналогичное Null в других языках.
if (document.all) используется, потому что это свойство есть в IE. Но его не советуют применять, так как другие браузеры тоже могут это свойство поддерживать.
a.rel = "sidebar";
a представляет собой гиперссылку. Ее атрибут rel показывает отношение цели ссылки к данному документу. Например, sidebar означает, что ссылка должна открываться в боковой панели.
Этот атрибут поддерживается в IE 7 и 8, FF2 и 3, Safari 3
windows.external - это объект, позволяющий внутреннему компоненту IE общаться с самим приложением (на базе этого компонента каждый может создать свой браузер, и пример есть в VS). И среди методов есть AddFavorite, позволяющий создать закладку.
5
Спасибо Вам. Интересно, а как же тогда вызывается функция getBrowserInfo(), ведь мы же вызываем только bookmark() ?
давно
Профессор
230118
3054
21.05.2010, 00:11
общий
Мироненко Николай Николаевич:
getBrowserInfo() вызывается из bookmark(a).
Неизвестный
21.05.2010, 00:18
общий
Гаряка Асмик:
Ааа, тьфу, у меня уже каша в голове
Форма ответа