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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Все линки на странице открывать в новых окнах, С помощью JS файла 
:(
    Опции темы
arkady347
Дата 23.3.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Можно ли средствами JS сделать так, чтобы все ссылки на HTML странице открывались в новых окнах?

Для этого есть известное решение :
Код

<base target="_blank">


Данный код прописывается в голове HTML страницы, и все ссылки при нажатии открываются в новых окнах.

Но возможно ли сделать то же самое через отдельный файлик .js ?  Еще лучше, включив код в уже имеющийся в комплекте сайта файл .js ?

Я морочился с методом windows.open  Но, видимо, чего-то не знаю, пока не получается.  
PM MAIL   Вверх
Samotnik
Дата 23.3.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: нет
Всего: 191



Код

var I_am_link = document.getElementsByTagName("a");
I_am_link.setAttribute("target", "_blank");

PM MAIL   Вверх
arkady347
Дата 23.3.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Samotnik @  23.3.2009,  13:57 Найти цитируемый пост)
код Javascript
1: var I_am_link = document.getElementsByTagName("a");
2: I_am_link.setAttribute("target", "_blank");

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

Только пока проблемка не решена.  
Создал JS файл с указанным кодом, 
прописал на ХТМЛ страничке 
Код

<script language=javascript src="my_file.js"></SCRIPT>

В итоге ссылки как открывались в том же окне, так и открываются.  
Все равно СПАСИБО за желание помочь.

Это сообщение отредактировал(а) arkady347 - 23.3.2009, 14:19
PM MAIL   Вверх
underW
Дата 23.3.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот содержание отдельного .js файла:

Код


function new_window(url){
newwindow=window.open(url,'name');
if (window.focus) {newwindow.focus()}
return false;
}




Вот пример странички:

Код


<html> 
<head> 
<title></title> 
<script type="text/javascript" src="my_file.js"></script>
</head>
<body>

<a href="http://www.kity.org.ua" onclick="return new_window('http://www.kity.org.ua')">Открыть в новом окне</a>

</body > 
</html>


PM MAIL   Вверх
arkady347
Дата 24.3.2009, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



underW  Спасибо!

Однако  это мне не подходит, поскольку придется вносить изменения в огромное число файлов, писать у каждой ссылки, которых по сотне на странице код onclick="return new_window  Мне проще тогда вставить в начало каждой страницы <base target="_blank">  и проблема решится.  Но в сайте несколько сотен страниц!

Я хочу сделать отдельный файл JS, а точнее включить в уже существующий файл JS код, который бы управлял открытием новых окон по клику на любой из многочисленных ссылок страницы, ничего не привнося нового в теги страниц.

По идее вариант, который предложил уважаемый Samotnik, должен бы работать, но я не знаю, почему он не работает.  smile 

PM MAIL   Вверх
underW
Дата 24.3.2009, 03:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

var am = document.getElementsByTagName("a");
for(i=0;i<am.length;i++){
am[i].setAttribute("target", "_blank");
}


PM MAIL   Вверх
arkady347
Дата 24.3.2009, 04:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за участие, underW !

Только этот скрипт тоже не открывает ссылки в новых окнах. 
PM MAIL   Вверх
Samotnik
Дата 24.3.2009, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: нет
Всего: 191



может это поможет  ?
ссылка

еще тут   тоже есть примеры  smile 
PM MAIL   Вверх
arkady347
Дата 24.3.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уважаемый Samotnik 
Большое тебе спасибо!

Поковырялся в первой ссылке около часа, но достиг желаемого результата - адаптировал под свои нужды.  Автор же ставил задачу уйти при открытии новых окон от свойства target, которое (автор во второй ссылке считает target "мертвым", статья от 2004 г.), поскольку это свойство не поддерживается доктайпом типа strict.   Все лишнее я выкинул из скрипта и выкладываю его здесь:
Код

function addEvent( obj, type, fn )
{
    if (obj.addEventListener)
        obj.addEventListener( type, fn, false );
    else if (obj.attachEvent)
    {
        obj["e"+type+fn] = fn;
        obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
        obj.attachEvent( "on"+type, obj[type+fn] );
    }
}

function removeEvent( obj, type, fn )
{
    if (obj.removeEventListener)
        obj.removeEventListener( type, fn, false );
    else if (obj.detachEvent)
    {
        obj.detachEvent( "on"+type, obj[type+fn] );
        obj[type+fn] = null;
        obj["e"+type+fn] = null;
    }
}

// Create the new window
function openInNewWindow() {
    var newWindow = window.open(this.getAttribute('href'), '_blank');
    newWindow.focus();
    return false;
}

function getNewWindowLinks() {
    // Check that the browser is DOM compliant
    if (document.getElementById && document.createElement && document.appendChild) {
        // Find all links
        var links = document.getElementsByTagName('a');
        var link;
        for (var i = 0; i < links.length; i++) {
            link = links[i];
            link.onclick = openInNewWindow;            
        }        
    }
}
addEvent(window, 'load', getNewWindowLinks);

Лишним были появляющиеся прямо за ссылкой текстовые надписи, указывающие на то, что ссылка будет открыта в новом окне, и искажающие дизайн страницы.  Причем это касалось ссылок, которым в тегах страницы присвоен определенный класс.  Но этой мороки мне не надо.  Проще было бы пойти тогда старым методом с использованием target _blank.  

Еще раз БОЛЬШОЕ спасибо всем за участие, особенно многоуважаемому Samotnik  smile 


PM MAIL   Вверх
ksnk
Дата 24.3.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Код

<body>
...

<script type="text/javascript">
var link, l = 0;
while (link = document.links[l++]) {
   link.target = '_blank';
}
</script>
</body>


А так не работает, разве?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
arkady347
Дата 24.3.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ksnk

А вот почему-то не работает.
Вы сами-то не проверяли  smile ?
PM MAIL   Вверх
Soah
Дата 24.3.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 13
Всего: 54



Код

<head>
<script type="text/javascript">
    document.getElementsByTagName('head')[0].onload = new function() {
        var b = document.createElement("base");
        b.setAttribute("target", "_blank");

        document.getElementsByTagName('head')[0].appendChild(b);
    }
</script>
</head>

?
PM MAIL   Вверх
ksnk
Дата 24.3.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



В каком, интересно, броузере не работает?
Код

<body>
...
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
<a href='http://google.com'>Гугель</a><br>
...
<script type="text/javascript">
var link, l = 0;
while (link = document.links[l++]) {
   link.target = '_blank';
}
</script>
</body>



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
underW
Дата 24.3.2009, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да, вот мне тоже интересно, в каком браузере не работает???

я пробывал свой вариант:
Код

var am = document.getElementsByTagName("a");
for(i=0;i<am.length;i++){
am[i].setAttribute("target", "_blank");

}


и вариант ksnk:

Код

var link, l = 0;
while (link = document.links[l++]) {
   link.target = '_blank';
}


Оба этих варианта рабочие, проверял и в FF, и IE, и Opera.... причем оба варианта размером в 3 строчки,  а у тебя целых 44...
PM MAIL   Вверх
arkady347
Дата 24.3.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дорогой ksnk

Мне нужно, чтобы скрипт был не в теле страницы, а в отдельном файле.  Именно об этом я писал в самом начале.  А предложенный вами, будучи размещен в отдельный JS файл, НЕ работает.  Все равно, спасибо!


Многоуважаемый Soah
СПАСИБО!  Ваш вариант открывает ссылки в новых окнах!  И он более компактный.  Повторю его здесь:
Код

    document.getElementsByTagName('head')[0].onload = new function() {
        var b = document.createElement("base");
        b.setAttribute("target", "_blank");
        document.getElementsByTagName('head')[0].appendChild(b);
    }

ПРИНОШУ многоуважаемой публике свои извинения.  Ввиду нечеткого проведения теста, по невнимательности я поспешил сделать заключение о способности выше упомянутого варианта, размещенного в отдельном файле, открывать линки в новых окнах.  Рабоатет пока только вариант из 44 строчек.

underW  Увы, нет!  Браузеры IE, FF, Opera.  Скрипт, конечно, работает, но только будучи помещенным в КОНЕЦ html страницы (так же, как и у  ksnk )

Thanks a lot everybody!   smile 



Это сообщение отредактировал(а) arkady347 - 24.3.2009, 15:21
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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