Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поочереди перейти по всем ссылкам со страницы (https://javascript.ru/forum/misc/38385-poocheredi-perejjti-po-vsem-ssylkam-so-stranicy.html)

irvin12345 30.05.2013 08:53

Поочереди перейти по всем ссылкам со страницы
 
Нужно обойти все ссылки со страницы. Все переходы нужно сделать в текущем окне.

Собственно, получаю все ссылки, но переходит сразу на последнюю. Чего-то не хватает?
var a=this.querySelectorAll('.links');
    for (var i=0; i<a.length; i++){
        document.location=a[i].value;
    }

zebra 30.05.2013 10:20

А вы сами как думаете? Есть у вас идеи почему не выходит?

irvin12345 30.05.2013 10:26

Цитата:

Сообщение от zebra (Сообщение 253556)
А вы сами как думаете? Есть у вас идеи почему не выходит?

программирую на js первый день, еще нет должного понимания, как и идей почему.

zebra 30.05.2013 10:36

Что делает 3-я строчка?

ruslan_mart 30.05.2013 14:57

irvin12345, ну естественно не будет работать, как Вы себе это представляете? У Вас код срабатывает на одной странице, затем идёт переход на другую страницу, где данного кода уже нет, а если даже и есть, то он будет срабатывать заново.

irvin12345 31.05.2013 01:17

Цитата:

Сообщение от Ruslan_xDD (Сообщение 253605)
irvin12345, ну естественно не будет работать, как Вы себе это представляете? У Вас код срабатывает на одной странице, затем идёт переход на другую страницу, где данного кода уже нет, а если даже и есть, то он будет срабатывать заново.

ок, сделал через сохранение ссылок в хранилище:
localStorage.setItem
localStorage.getItem
localStorage.removeItem
и анализ его при загрузке страницы.

Идем дальше. Можно ли как-нибудь сделать это без перезагрузки скрипта? Т.е. есть расширение (например для хром), оно запускается 1 раз при заходе на урл, и дальше все переходы чтобы шли под его управлением(в текущей или в крайнем случае в соседней вкладке)

ruslan_mart 31.05.2013 05:20

irvin12345, можно добавить на страницу iframe, и делать все переходы в нём. Или можно с помощью ajax, и при переходе менять ссылку в адресной строке через history.pushState(0, 0, 'url').

Aetae 31.05.2013 08:01

Если использовать дополнительную вкладку, то можно так. Но это не особо красиво.
(function(){
	var w = window.open('about:blank','linker'), d = w.document;
		d.open();
		d.write('<html><body>Вспомогательная вкладка</body></html>');
		d.close();

	var win = window,
		links = ['http://ya.ru', 'http://google.ru', 'http://javascript.ru'],
		l = links.length,
		i = 0;
		
	(function timeout(){
		win.location.href = links[i++ % l];
		w.setTimeout(timeout, 1500)
	}());
}())

Deff 31.05.2013 10:41

Достаточно простая реализация - фрейм во всю вкладку и подстановка по очереди всех ссылок в src фрейма,
Тогда не нужны правки и запоминания выполненных ссылок
Достаточно обойтись одним скриптом и массивом ссылок

dmitriymar 31.05.2013 10:48

Очередной "сёрфер".
Угадайте, есть ли защита от подобного и сколько лет назад начали от подобного защищаться...?

irvin12345 31.05.2013 16:35

Цитата:

Сообщение от dmitriymar (Сообщение 253774)
Очередной "сёрфер".
Угадайте, есть ли защита от подобного и сколько лет назад начали от подобного защищаться...?

Не совсем уверен что понял что значит "сёрфер", но не думаю что это про данный случай.
Всем остальным спасибо, теперь хотя бы знаю что это возможно, буду разбираться.

irvin12345 12.06.2013 15:15

Спасибо всем еще раз, для меня идеально подошло вот так: (сохранить как 1.htm , запускать в chrome)
Алгоритм: в пустом html создается iframe, на событие onload которого повешено выполнение следующей итерации и условие останова.

<script>
var i = 0;
var links = ['http://learn.javascript.ru/', 'http://javascript.ru/forum/misc/', 'http://javascript.ru'];
var iframe;

function main(){
    //всякие полезные действия
    //...
    //...
    //переход дальше
    if (++i<links.length){
        iframe.src=links[i];
    }else{
        iframe.onload="";
    }
}

window.onload = function() {
    iframe = document.createElement("iframe");
    document.body.appendChild(iframe);
    iframe.id = 'iframe';
    iframe.style.width = "100%";
    iframe.style.height = "100%";
    iframe.onload=main;
    iframe.src=links[i];//многие сайты блокируют открытие себя в фрейме, но не все.
}
</script>


Часовой пояс GMT +3, время: 13:53.