У меня есть проект Cordova в Visual Studio. Мне нужны данные сервера, которые я получаю, выполняя запросы ajax GET. Я исправил проблемы CORS, добавив метатег
<meta http-equiv = "Content-Security-Policy" .../>
и мой внутренний сервер также отвечает на запросы CORS, потому что я добавил эту строку в свой web.config:
<add name = "Access-Control-Allow-Origin" value = "*" />
Моя установка РАБОТАЕТ в моделировании и на устройствах для iOS и Android.
Теперь мне нужно сделать свое первое приложение для Windows. Когда я перехожу на сборку для Windows 10, в режиме отладки приложение никогда не получает данные с сервера.
Это мои наблюдения:
На этом снимке экрана показаны инструменты разработчика. Я нажимаю кнопку «Обновить» в приложении. Первые 2 записи делаются без запущенного Fiddler. Затем я запускаю Fiddler, и теперь данные возвращаются. Я заметил «(Из кеша)» в столбце «Получено», но нажатие кнопки «Очистить кеш» (в инструментах разработчика) не устраняет проблему.
Есть ли какие-то особые настройки, которые я мог бы не установить для Windows в Кордове?
Редактировать: Вот простой источник, который так же терпит неудачу. Для воспроизведения создайте пустой проект Cordova в Visual Studio, добавьте jQuery и разверните.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv = "Content-Security-Policy" content = "default-src 'self' 'unsafe-inline' data: * gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
<meta http-equiv = "content-type" content = "text/html; charset=UTF-8" />
<meta name = "format-detection" content = "telephone=no">
<meta name = "msapplication-tap-highlight" content = "no">
<meta name = "viewport" content = "user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<link rel = "stylesheet" type = "text/css" href = "css/index.css">
<title>WinApp</title>
<script src = "scripts/jquery-3.3.1.min.js"></script>
<script type = "text/javascript">
function ajaxReq() {
$.ajax({
type: 'GET',
url: 'http://192.168.1.79/',
dataType: 'json',
success: function (msg, status, jqXHR) {
alert('it worked')
return true;
},
error: function (jqXHR, exception) {
alert('it failed')
return false;
},
timeout: 30000
});
}
</script>
</head>
<body>
<script type = "text/javascript" src = "cordova.js"></script>
<script type = "text/javascript" src = "scripts/platformOverrides.js"></script>
<script type = "text/javascript" src = "scripts/index.js"></script>
<button onclick = "ajaxReq(); return false;">click me</button>
</body>
</html>
Опубликованный код работает, если он запущен как симуляция браузера для iOS и Android. Он не работает на локальном компьютере для сборок Windows (x86 и x64).
Прокси отсутствует, сервер находится в локальной сети. И я не особо задумывался о сетевых проблемах, поскольку, если я просто собираю для iOS или Android, у меня не будет проблем. Есть ли какие-то особые настройки для Windows, которые могут быть связаны с этим? Это моя первая сборка для этой платформы.
Никаких особых настроек кроме разрешения. но так как он хорошо работает с открытым скрипачом. Я не думаю, что это проблема с разрешением.
Вот почему я думал о CORS, потому что я представляю, что скрипач внедряется между локальным и внешним подключением, делая его локальным подключением, видимым из приложения ... (подключение приложения к скрипту)
И это не имеет смысла, когда код состояния 200, пока сервер ничего не получил. Не могли бы вы попробовать отладить и посмотреть, не вернется ли что-нибудь?
Когда я отлаживаю, поведение похоже на проблему с CORS. Запрос Ajax немедленно завершается с ошибкой с кодом 0. И это происходит так быстро, что я уверен, что запрос никогда не был отправлен.
Не могли бы вы поделиться базовой демонстрацией, которая может воспроизвести проблему? Я попробую на моей стороне.
Я добавил к вопросу упрощенный источник. Я обнаружил, добавлю ли я внешний URL-адрес - например, газета, данные загружаются. Однако мой локальный сервер не работает => результаты кешируются ...





Похоже на проблему с сетью. Вы использовали какой-нибудь прокси? А вы пробовали другие общедоступные веб-службы?