вівторок, 28 жовтня 2008 р.

JavaScript: externals без rel

Написал такой вот скриптик для людей, которые не дружат с target и rel одновременно. Он находит на странице все внешние ссылки. Когда пользователь кликнет по ним, он получает предупреждение, что на том сайте могут быть вирусы и т.п. и типа он переходит на свой страх и риск (как В Контакте). Текст сообщений, естественно, можно менять.

Итак, код JavaScript:
<script language="JavaScript"> 
// www.kichrum.org.ua No rights reserved.
function external() {
for (i in document.links) {
link = document.links[i];
if (link.href && link.href.indexOf('http://')==0 && link.href.indexOf('kichrum.org.ua')==-1) {
link.onclick = onExternalLinkActivate;
link.onkeypress = onExternalLinkActivate;
}
}
}
function onExternalLinkActivate() {
if (confirm("Вы покидаете мой сайт по внешней ссылке.\nЯ не несу ответственности за содержимое сайта, содержащегося по этой ссылке.\nОн может содержать вирусы, трояны и другие вредоносные программы, опасные для Вашего компьютера. Если у Вас нет серьезных оснований доверять этому сайту, лучше всего на него не переходить и нажать Отмена.\nЕсли Вы не передумали, нажмите ОК."))
window.open(this.href);
return false;
}
window.onload = external;
</script>

Достаточно вставить на все страницы вашего сайта.

И еще один вариант - различаем external и внешние без rel (как бы проверенные).
Если external - скрипт предупредит и откроет в новом окне. Если же ссылка проверена - спросит, в новом или в этом же окне открывать.

<script language="JavaScript"> 
// www.kichrum.org.ua No rights reserved.
function external() {
for (i in document.links) {
link = document.links[i];
if (link.href && link.href.indexOf('http://')==0 && link.href.indexOf('kichrum.org.ua')==-1)
if (link.rel && link.rel.indexOf('external')!=-1) {
link.onclick = onExternalLinkActivate;
link.onkeypress = onExternalLinkActivate;
}
else {
link.onclick = onApprovedLinkActivate;
link.onkeypress = onApprovedLinkActivate;
}
}
}
function onExternalLinkActivate() {
if (confirm("Вы покидаете Kichrum's Blog по внешней ссылке.\nАвтор блога (Kichrum) не несет ответственности за содержимое этого сайта.\nОн может содержать вирусы, трояны и другие вредоносные программы, опасные для Вашего компьютера. Если у Вас нет серьезных оснований доверять этому сайту, лучше всего на него не переходить.\n\nЕсли Вы еще не передумали, нажмите ОК.\nЕсли Вы не хотите рисковать своей безопасностью, нажмите Отмена."))
window.open(this.href);
return false;
}
function onApprovedLinkActivate() {
if (confirm("Вы пытаетесь перейти по внешней ссылке.\n\nЕсли Вы хотите ПОКИНУТЬ Kichrum's Blog и перейти по ссылке, нажмите ОК.\nЧтоб открыть ее в новом окне, нажмите Отмена."))
window.location=this.href;
else window.open(this.href);
return false;
}
window.onload = external;
</script>


Пользуйтесь на здоровье :)

8 коментарів:

MrGALL сказав...

ІМХО питати користувача, чи вони хочуть покинути сайт, це вже занадто...
Я б на такий сайт більше не зайшов би або заблокував би на ньому javascript.

Віруси, трояни та все інше то проблеми користувачів, які користуються небезпечним софтом (наприклад ІЕ, Outlook і т.п.)

Kichrum сказав...

Так тебе второй вариант не понравился, или оба? (В том числе и то, что установлено у меня сейчас)

P.S. ВКонтакте не крут? :(

MrGALL сказав...

Мені не подобається сама ідея питати користувача, чи дійсно він хоче щось зробити (крім випадків, коли його дії можуть мати критичні налідки).
Перехід за лінками це основна особливість вебу і штучно її обмежувати це дуже погана ідея...

Вконтакті звісно не крутий (мені більше подобається Facebook, але ми не його обговорюємо), до того ж навіть та його фіча не врятувала від вірусних епідемій влітку.

Snack сказав...

Та да... Это уже "занадто". Достаточно было бы target="_blank" использовать, и насрать на стандарты.

PS. Блин, зачем я тебе показал сколько ошибок у тебя на сайте валидатор находит :)

Kichrum сказав...

Та мне наплевать на ошибки в блоге. Я их исправлять не собираюсь. Я просто думаю о будущих проектах. К тому ж хочется джаваскрипт немножко освоить.

Убрал запрос... Просто открывается в фоновой вкладке. Раз уж читатели так решили =)

potapuff сказав...

Поставь какой-нибуть типограф для форматирования и подсветки кода. Когда его будеть больше - совсем неудобно читать будет.

Kichrum's Blog сказав...

По вашим заявкам...

По замечанию моего преподавателя программирования, высказанному комментарием к этому посту, поставил подсветку синтаксиса кода. В той ж....

Виктор сказав...

Спасибо за подсветку кода ;)