Загрузка файла через ajax вызывает ошибку безопасности в браузере в веб-приложении PreactJavascript

Форум по Javascript
Ответить
Anonymous
 Загрузка файла через ajax вызывает ошибку безопасности в браузере в веб-приложении Preact

Сообщение Anonymous »

Я пытаюсь переписать старый проект интерфейса HTML и простого JS, используя Vite и Preact. Я создал проект, как предложено в документации по началу работы, через:

Код: Выделить всё

npm init preact
Основы, кажется, работают нормально. Но в настоящее время я спотыкаюсь о проблеме с загрузкой файла через ajax. Типичный фрагмент, который вы там найдете, выглядит примерно так (в моей среде разработки серверная часть работает по адресу http://localhost:8080, а интерфейсная часть — по адресу http://localhost:5173)

Код: Выделить всё

let response = await fetch("http://localhost:8080/api/entries/template");
if (response.ok) {
let content = await response.text();  //I know this request always returns a plain text file
let type = "text/plain";          //and sets the respective content-type header

let downloadLink = document.createElement('a');
downloadLink.href = window.URL.createObjectURL(new Blob([content], { type }));
downloadLink.download = 'filename.txt';
document.body.appendChild(downloadLink);
downloadLink.click();
}
Это (более или менее) копия и вставка из старого проекта, где он работает нормально. Но он больше не работает с новым проектом и выдает следующую ошибку безопасности

Uncaught SecurityError: Не удалось выполнить «pushState» в «Истории»: объект состояния истории с URL-адресом «blob:/26cd13a0-b444-4ff4-9dd5-f3b79d04b2ec» не может быть создан в документе с источником 'http://localhost:5173' и URL-адрес 'http://localhost:5173/entries'

Стековая трассировка указывает на preact-iso и выводит на History.pushState в следующем фрагменте:

Код: Выделить всё

function handleNav(state, action) {
...
url = link.href.replace(location.origin, "");
...
if (push === true) history.pushState(null, "", url);
...
}
при этом push имеет значение true, а url — это blob:/..., упомянутый в ошибке. Кажется примечательным, что link.href, сгенерированный window.URL.createObjectURL, выглядит немного иначе, т. е. представляет собой что-то вроде blob: http://localhost:5173/26cd13a0-b444-4ff ... b79d04b2ec
Что я здесь делаю не так? Этот метод больше не работает с Preact Router? Если да, то как правильно это сделать в веб-приложении Preact?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ct-web-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»