У меня есть проект 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, в режиме отладки приложение никогда не получает никаких данных с сервера.
Это мои наблюдения:
- Сервер не получает никаких запросов от приложения.
- Когда я нажимаю F12 и смотрю на вкладку Сеть, запрос помечается статусом 200, хотя запрос не зарегистрирован на сервере.
- Если я запускаю Fiddler, приложение начинает получать данные, то есть данные возвращаются при каждом запросе.
Этот снимок экрана - Инструменты разработчика. Я нажимаю кнопку Обновить в приложении. Первые 2 записи сделаны без запуска Fiddler. Затем я запускаю Fiddler, и теперь данные возвращаются. Я заметил "(из кэша)" в столбце "Получено", но нажатие кнопки "очистить кэш" (в инструментах разработчика) не устраняет проблему.
Существуют ли какие-либо специальные настройки, которые я мог бы не установить для Windows в Cordova?
Редактировать: Вот некоторый простой источник, который выходит из строя в той же манере. Чтобы воспроизвести, создайте пустой проект 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).