Я не могу заставить мой скрипт запускать window.location.replace
несколько раз. У меня есть флеш-приложение, которое создает файлы с учетом уникальных идентификаторов, найденных в журналах потокового доступа на сервере. После того, как файл находится на сервере, у меня есть маршрут фляги, который, если пользователь перенаправлен на https://somewebsite.com/getFile/<id>
, он будет чем толкать файл, который был создан на сервере клиенту.
Вот мой сценарий ниже:
<script>
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
var response = '';
if(xhr.readyState === 4 && xhr.status === 200){
response = xhr.responseText;
response = response.substring(0, response.length-1);
response = response.split('\n');
for(x in response){
url_path = response[x];
window.location.replace(url_path);
};
};
};
xhr.open('GET', '{{ url_for('stream') }}', true);
xhr.send();
</script>
Я сделал несколько вызовов console.log()
чтобы убедиться, что цикл for работает правильно, и это так. Даже url_path
заданный для window.location.replace
является правильным. Следует отметить, что при перенаправлении на https://somewebsite.com/getFile/<id>
браузер технически не меняет этот URL-адрес, потому что флажок не отображает шаблон, а вместо этого возвращает загрузку файл, поэтому браузер остается на текущем пути URL после загрузки файла.
Я не уверен, почему я не могу заставить скрипт запускать window.location.replace
более одного раза. Похоже, если в объекте ответа есть 2 url_path, загружается только последний. То же самое происходит с 3 или 4 дорожками. Любое понимание было бы полезно. Спасибо
Альтернативное решение, которое я только что понял, вместо того, чтобы перенаправить один и тот же браузер на несколько URL-адресов, почему бы просто не открыть их на разных вкладках. Я сделал это, используя window.open
, что, к моему удивлению, действительно сработало.
Тем не менее, блокиратор блокировки браузера блокировал их сначала, но после изменения настроек и разрешения всплывающих окон для страницы я смог успешно загрузить несколько файлов клиенту. Кроме того, поскольку на стороне сервера нет рендеринга шаблонов, сами вкладки фактически не отображаются, поэтому браузер не будет залит вкладками.
Мне все еще интересно узнать, почему window.location.replace
не работает, если кто-нибудь знает, почему.
Ваш код не работает, потому что window.location.replace
буквально заменяет исходный документ (см. Документацию) на документ, предоставленный новым URL. Это означает, что любой код, который вы поместите после window.location.replace
, не будет выполнен.
Вот почему window.open отлично подходит для вашей ситуации, потому что он откроет новый документ, кроме того, который он называется. Но будьте осторожны, потому что не все параметры работают для всех браузеров (проверьте это для спецификаций совместимости).
window.location.assign
вместоwindow.location.replace
window.location.assign
, но он все еще загружает только один файл. Я проверил журнал сервера и вижу только один запрос GET, а другой нет. выполняется Я добавилconsole.log
после запроса, и он печатает оба раза.