LINUX.ORG.RU

Кроссдоменная загрузка данных в JavaScript

 , ,


0

4

Есть некий сайт, с которого можно скачать CSV файл. Я хочу написать HTML+JavaScript, который будет открываться локально, загруждать этот CSV файл и дальше использовать его содержимое для дальнейших манипуляций. К сожалению сервер того сайта отдаёт весь контент с хедером X-XSS-Protection: 1; mode=block и это не позволяет скачать содержимое данного файла JavaScript кодом моего локальнго HTML файла. Можно ли это как-то преодолеть?

Текущий код:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
	var csvText;

	function loadCsv() {
		fetch('https://pais.co.il/Lotto/lotto_resultsDownload.aspx')
			.then(function (response) {
				response.text().then(function(text) {
					csvText = text;
				});
			});
	}
</script>
</head>
<body onload="loadCsv()">
	<input type="button" onclick="console.log(csvText)" value="Show loaded text on console" />
</body>
</html>

Если заменить URL внутри этого кода на какой-то другой, где X-XSS-Protection: 1; mode=block не используется, код работает. Но мне нужен именно этот URL.



Последнее исправление: hummer (всего исправлений: 1)

Ответ на: комментарий от tfeartx

И нахрена бы тогда был нужен хедер и вообще cors, если бы его можно было просто игнорировать на клиенте?

Зачем нужен cors для локальных файлов?

hummer
() автор топика
Ответ на: комментарий от hummer

Локальный файл, я же написал.

Плюсану остальных. Самое время поднять свой сервер локально, это не сложно, не страшно и увлекательно.

vvn_black ★★★★★
()

Это так не работает, ты занимаешься хернёй.

anonymous
()
Ответ на: комментарий от hummer

А если я хочу открывать этот файл на смартфоне, мне туда тоже локальный сервер тащить?

Есть еще один вариант — написать свой браузер без поддержки CORS и убедить мир им пользоваться. Но я бы лучше поднял локальный сервер.

Nervous ★★★★★
()
Ответ на: комментарий от hummer

Я лично так и делаю при необходимости. Есть termux, внутри python и простейший сервер. У меня самодельное браузерное приложение «для себя», в котором я по 10 часов в день сижу.

И только через стандартный файловый менеджер html файл открывается через «content:*****». Через «файловый менеджер +» файл открывается именно через сервер, который отключается когда возвращаешься к файлам.

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

kolpakchi
()
Ответ на: комментарий от hummer

Ну если тебе лень даже на оракле бесплатную виртуалку взять под прокси, то я сдаюсь.

tfeartx
()
Ответ на: комментарий от Nervous

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

tfeartx
()
Ответ на: комментарий от kolpakchi

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

hummer
() автор топика
Ответ на: комментарий от tfeartx

Были для обычных версий, про мобильные я не слышал.

hummer
() автор топика
Ответ на: комментарий от hummer

А если я хочу открывать этот файл на смартфоне, мне туда тоже локальный сервер тащить?

Серверу не обязательно быть на смартфоне, достаточно быть там, где ты до него сможешь добраться со всех своих устройств.

Nervous ★★★★★
()
Ответ на: комментарий от hummer

Я в курсе, просто не хочу с этим возиться. Смотри выше.

В итоге будешь сидеть вообще без результата - так разве лучше?

tfeartx
()
Ответ на: комментарий от hummer

не хочу с этим возиться

Ну тогда пиши браузер.

Nervous ★★★★★
()

Создай окно/фрейм и впиши туда location(«blabla») В скрипт или в мету без разницы

anonymous
()
Ответ на: комментарий от anonymous

Создай окно/фрейм и впиши туда location(«blabla») В скрипт или в мету без разницы

И что будет, по твоему?

tfeartx
()
Ответ на: комментарий от kolpakchi

А это поможет? Там написано, что в jQuery есть обёртка. https://ru.m.wikipedia.org/wiki/JSONP

Идея конечно интересная, но требует поддержки на стороне сервера, а в моём случае сервер не мой и получать я буду чистый CSV, загружать который в <script> бесполезно.

hummer
() автор топика
Последнее исправление: hummer (всего исправлений: 1)

Мне почему то кажется, что вы пытаетесь решить задачу не самым оптимальным образом. Как уже советовали, проксирование ссылки на стороне веб сервера должно сильно помочь. Да и вообще, манипуляции с данными скорее задача для бэк энда и соответствующих же ЯПов. Хотя бы и пыхи. В современном мире не сложно арендовать какую ни будь VPSку, которая будет доступна, в том числе, с телефона и предоставит все необходимые инструменты для вашей задачи.

Возможно, и скорее всего, эту задачу можно решить и силами JSа, ну или какой ни будь библиотеки к нему, но стоит ли закреплять сомнительные подходы?

Кстати ссылку мне открыть так и не удалось, даже через тор. Это к вопросу о доступности с мобильного :)

Saivrem
()
Ответ на: комментарий от hummer

чтобы не городить огород с написанием полноценного приложения под Андроид.

Ты не поверишь, это сильно проще. Ну или возьми cordova/ionic и т.п.

Shadow ★★★★★
()

попробуй запустить браузер с выклченым cors-policy

как например

chromium-browser --disable-web-security -–allow-file-access-from-files --user-data-dir=/tmp 1.html
anonymous
()
Ответ на: комментарий от Saivrem

Возможно, и скорее всего, эту задачу можно решить и силами JSа, ну или какой ни будь библиотеки к нему

Так ведь в том то и дело, что нельзя. Это вопрос не возможностей js или либ к нему, это вопрос к браузерам.

tfeartx
()
Последнее исправление: tfeartx (всего исправлений: 1)
Ответ на: комментарий от tfeartx

Меня в этой истории смутил только момент что сам хедер поддерживается только двумя браузерами, это IE и Safari, во всяком случаее страница на мозилке говорит так, возможно как то обойти это и удастся.

X-XSS-Protection

Ну либо дело и вовсе не в нем.

Saivrem
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.