Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Програмное изменение домена страницы. (https://javascript.ru/forum/misc/39379-programnoe-izmenenie-domena-stranicy.html)

SeemaN_tm 27.06.2013 15:07

Програмное изменение домена страницы.
 
Всем привет.
Интересует вопрос. Возможно ли на загруженной странице изменить её домен или скриптом изменить все вариации ссылок ?

К примеру. Открыл я страницу рамблера. А скрипт, который находится в коде этой страницы, в момент полной загрузки страницы браузером правит все ссылки. Дабы все относительные ссылки ссылались не на домен рамблера а к примеру яндекса.

Я понимаю что ссылки станут не рабочими. Но это не суть важна. Важен принцип.

Deff 27.06.2013 15:12

Цитата:

Сообщение от SeemaN_tm
Я понимаю что ссылки станут не рабочими. Но это не суть важна. Важен принцип.

В принципе есть онлайн парсеры сайтов, с приведением всех абсолютных ссылок ресурса, в относительные и позволяющие сохранять сайты в качестве бекапа на компьютер, с просмотром ничем не отличающимся от онлайн

Deff 27.06.2013 15:26

Цитата:

Сообщение от SeemaN_tm
Но это не суть важна. Важен принцип.

В принципе подобная задача достаточно проста и ничем не ограничена,
<script type="text/javascript">
window.onload= function() {
  var arr=document.links;
  var chang1= "javascript\\.ru"; // Точки экранируем
  var chang2="myCite.ru";
  chang1 = new RegExp(chang1,"i");
  for (i=0;i<arr.length;i++){
    arr[i].href = arr[i].href.replace(chang1,chang2);
  }
}
</script>

SeemaN_tm 28.06.2013 05:58

Пример и принцип понятен. Благодарю.

danik.js 28.06.2013 06:34

SeemaN_tm, чаще всего на сайтах в ссылках прописаны относительные ссылки, без домена. Поэтому достаточно создать внутри <head> тег <base target="//новый_домен.ru" /> и ссылки будут указывать на новый домен

danik.js 28.06.2013 06:39

Поправка: не .target , а .href:

<a href="test.html">test.html</a>
<button id="button">Сменить домен</button>
<script>
    button.onclick = function() {
        var base = document.createElement('base');
        base.href = '//ya.ru';
        document.head.appendChild(base);
    }
</script>

SeemaN_tm 28.06.2013 19:06

Вообще замечательно.

А можно на странице сделать некую ловушку, которая в случае клика по ссылке или страница просто решила подгрузить скрип или картинку, или же загруженный скрипт пытается куда нить лукануться, могла бы отловить это событие и изменить адрес обращения к примеру не просто на ya.ru, а некий_айпи:некий_порт/ya.ru ?

Если подробней. То я делаю некое подобие прокси сервера.
Обращаюсь к проге через браузер ссылкой в адресной строке:
192.168.0.100:8080/www.rambler.ru

Моя программа получает запрос вида:
GET /www.rambler.ru HTTP/1.1/r/n
Host: 192.168.0.100:8080/r/n
И так далее...

Приводит запрос к виду:
GET / HTTP/1.1/r/n
Host: www.rambler.ru/r/n
И так далее...

Получает с инета эту страницу и отправляет клиенту запросившему её.
Но вот не задача. Все ресурсы страницы по относительным ссылкам, страница начинает запрашивать таким образом:
GET /java/js.js HTTP/1.1/r/n
Host: 192.168.0.100:8080/r/n
И так далее...

В итоге моя программа не может узнать с какого домена этот скрипт грузить.
Как вариант, отлавливать все ссылки на странице и править их.
Сложно, громозко (в программном коде), но можно. А вот как со скриптами поступить ? Ведь там страница может разбита по нескольким переменным. И следовательно, может быть просто не реально научить программку отслеживать и править такие адреса.

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

Вот и встаёт вопрос, можно ли с минимумом изменений страницы сделать чтоб любая ссылка на странице или скрипте обращалась куда либо только через 192.168.0.100:8080 ?

Поделитесь мыслями.

danik.js 28.06.2013 19:39

Цитата:

Сообщение от SeemaN_tm
Вот и встаёт вопрос, можно ли с минимумом изменений страницы сделать чтоб любая ссылка на странице или скрипте обращалась куда либо только через 192.168.0.100:8080 ?

Думаю это не реально сделать клиентским скриптом.
Допустим где-то в скрипте происходит смена страницы:
window.location = 'new_address.html';


Эту смену никак не отловить, насколько я знаю.
Может быть задачу можно решить написав скрипт-расширение для браузера.

Deff 28.06.2013 19:41

Ну наверно ловить клик по ссылке, произвести анализ ссылки на соответствие с текущим доменом

SeemaN_tm 28.06.2013 21:26

Ну благодарю и на этом.
Есть пара идей. Посмотрим на сколько они осуществимы.


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