В настоящее время я создаю расширение браузера для университетского проекта. Однако, когда я писал расширение, я столкнулся с действительно странной проблемой. Чтобы полностью понять мою ситуацию, мне нужно будет описать ее как задолженность, откуда возникла моя проблема.
Расширение, над которым я сейчас работаю, должно иметь функцию, которая проверяет, может ли браузер подключаться к Интернету или нет. Вот почему я решил создать очень простую функцию запроса AJAX и в зависимости от результата, возвращаемого этой функцией, определять, есть ли у пользователя подключение к Интернету или нет.
Вот почему я создал эту очень простую функцию AJAX, которую вы можете увидеть под этой строкой.
$.ajax({
url: "https://enable-cors.org/index.html",
crossDomain: true,
}).done(function() {
console.info("The link is active");
}).fail(function() {
console.info("Please try again later.");
});<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>Пока я понимаю, что он делает, он работает нормально. Например, если вы запустите функцию как есть, она будет успешно подключаться к URL-адресу и обрабатывать с помощью ".done (function ...", если вы измените URL-адрес на "index273.index" файл, которого не существует. будет обрабатывать с помощью ".fail (function ...". Я был доволен результатом, пока не решил протестировать его еще раз и отключил кабель от компьютера. Затем, когда я запустил расширение, оно вернуло последний результат, когда браузер был подключен к Интернету. Мое объяснение, почему функция делает это, заключается в том, что он кэширует результат URL, и если он не может подключиться, он выдает последнее кешированное значение. Следующим моим шагом, чтобы попытаться решить эту проблему, было добавление "cache: false "после свойства" crossDomain: true ", но после этого, когда я запускаю расширение, оно выдает следующую ошибку:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://enable-cors.org/index?_=1538599523573. (Reason: CORS header 'Access-Control-Allow-Origin' missing).
Если кто-то может помочь мне разобраться с этой проблемой, я был бы чрезвычайно благодарен. Я хотел бы заранее извиниться за свой английский, но это не мой родной язык.
PS: Я пытаюсь реализовать эту функцию во всплывающем меню, а не в категории «content_scripts». В настоящее время я тестирую это в Firefox v62.0.3 (последняя доступная версия на момент написания этого сообщения).
С наилучшими пожеланиями, Георгий



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Возможно, вместо вызова URL-адреса, чтобы проверить, доступно ли подключение к Интернету, вы можете попробовать использовать объект Navigator: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/connection
если удаленный сервер не разрешил происхождение (разрешено cors), вы не можете получить к нему доступ, потому что это проблема безопасности.
Но есть и другие вещи, которые вы можете сделать:
но вы не можете получить доступ к другим страницам, потому что (если этот сервер не разрешает это) это проблема безопасности.
Ссылка, используемая в этом примере, ведет на сервер, на котором включен CORS. В противном случае вам не будет разрешено загрузить «.done (function ...», и, как вы можете видеть, он возвращает «Ссылка активна». Я думаю, проблема возникла из другого места.
В сообщении об ошибке говорилось: «(Причина: отсутствует заголовок CORS« Access-Control-Allow-Origin »)». это означает, что CORS не включен.
Эта ошибка возникает только тогда, когда я добавляю "cache: false". Если вы запустите образец, который я прикрепил, вы увидите, что все работает так, как должно быть. Странная часть появляется, когда вы отсоединяете кабель и пробуете его в автономном режиме. Насколько мне известно, это не имеет ничего общего с CORS. Ссылка, которую я дал, ведет на сервер с включенным CORS.
Пока это поддерживается только Chrome, и я искал более универсальное приветствие.