Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Подгрузка скрипта перед редиректом ссылки (https://javascript.ru/forum/css-html/13698-podgruzka-skripta-pered-redirektom-ssylki.html)

Cepin 09.12.2010 22:30

Подгрузка скрипта перед редиректом ссылки
 
Здравствуйте, возникла следующая проблема.

На странице имеется самая обыкновенная ссылка.

Задача состоит в том, чтобы перед редиректом ссылки, подгрузить скрипт, а затем выполнить редирект.


Сама функция подгрузки
function fetch(url) {
		var script  = document.createElement('script');
		script.src  = url;
		script.type = 'text/javascript';
		root.document.getElementsByTagName('head')[0].appendChild(script);
	}




Код вызова
link.onclick = function() {
    fetch('http://example.com/script.js');
    return true;
}


В опере такая конструкция работает без проблем.
ФФ и хром сбрасывают соединение c подгружаемым скриптом, как только видят редирект.
Пытался решить это внедрением setTimeout на 2 секунды, все равно скрипт не загружается (NS_BINDING_ABORTED - в фф выдается).

Что посоветуете? Это пользовательский скрипт и задача поставлена ребром так, что именно перед редиректом ссылки нужно подгрузить еще один скрипт.

Sweet 09.12.2010 23:36

Как насчет останавливать ссылку (return false), а после всяких там операций переходить по ней меняя window.location?

Cepin 09.12.2010 23:59

Скрипт является своего рода статистикой и предназначен для сохранения переменной перед кликом по ссылке. Т.е. я подгружаю "скрипт" такого вида

http://example.com/cache.php?var=123

Соотвественно, по этой ссылке происходит сохранение результатов(а затем обратно выдача их клиенту).

Можно попробывать возвращать редирект, но это на крайний случай так как:
- теряется гибкость, ссылки могут быть разные.
- Клиенту придется заморозить браузер, пока не подгрузится скрипт.


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

Kolyaj 10.12.2010 10:09

Вам не нужен ответ от сервера, т.е. загружать скрипт не надо, надо только, чтобы успел отправиться запрос. А успел ли он надо проверять на сервере, firebug тут не помощник.

И запрос проще отправить так
new Image().src = 'http://example.com/cache.php?var=123';

Cepin 10.12.2010 21:06

Такой запрос показал себя хорошо в опере и в мозиле. Хром прервал соединение, даже не отослав запрос.


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