Как предотвратить внешний запрос JS
Я использую службу, которая автоматически создает и запускает стартовые страницы. В теле их кода у них есть вызов jquery:
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js?cache=2015-09-22-09">
К сожалению, поскольку я нахожусь в Китае, googleapis.com заблокирован, и страница должна ждать, пока этот код не закроется до его отображения. Эта часть автогенерируется как часть шаблона, и я не могу ее изменить. Однако я могу вставить пользовательский javascript в голову и тело.
Можно ли каким-либо образом запретить этому коду делать запрос на googleapis.com или принудительно отменять его после того, как он уже сделал запрос?
-Edit -
Здесь отображается экранная вкладка сети, когда я пытаюсь загрузить страницу. Как вы можете видеть, вызов googleapis.com зависает в течение 1,4 минут до истечения времени ожидания, после чего запускаются триггеры DomContentLoaded и вся страница.
![введите описание изображения здесь]()
Ответы
Ответ 1
Правильно, если вы можете поместить html в начало документа, а не просто выполнить javascript, вы можете использовать метатег для блокировки внешней загрузки script:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
Из Документы Meta Tag с областью политики конфиденциальности для платформы Mozilla:
Авторы настоятельно рекомендуется размещать мета-элементы как можно раньше, потому что политики в метаэлементах не применяются к содержащемуся в них материалу. В частности, обратите внимание, что ресурсы, извлеченные или запрограммированные с использованием поля заголовка ответа HTTP-ссылки, а ресурсы, извлеченные или предварительно загруженные с использованием ссылок и script элементов, предшествующих политике метаданных, не будут заблокированы.
Таким образом, метатег будет работать только в голове, конечно, перед script, который загружает jQuery. Вы можете переадресовывать URL-адрес в тег, добавляя их в параметр содержимого в метатеге тоже.
Если вы можете выполнять только javascript, вы можете добавить метатег динамически. К сожалению, вероятно, браузер, вероятно, определил его политики к моменту его добавления. Тем не менее, его можно добавить с помощью
var meta = document.createElement('meta');
meta.httpEquiv = "Content-Security-Policy";
meta.content = "script-src 'self'";
document.getElementsByTagName('head')[0].appendChild(meta);
Более интересная домашняя работа для чтения материалов для решения "Предотвратить тайну внешнего запроса js":
Использовать JavaScript, чтобы предотвратить оценку тега` <script> `<
Удачи!
Ответ 2
Рассмотрите возможность использования политики безопасности контента. Это был бы необычный случай использования, но с CSP вы можете сказать браузеру, что ему не разрешен доступ к googleapis.com, прежде чем ваше правительство даже получит ответ на этот вопрос. Таким образом, браузер даже не попытается загрузить его, и страница не будет висеть.
Ответ 3
Да. @Нить предложение кажется приятным. Чтобы добавить к его ответу, вот как можно блокировать рендеринг домена googleapi с помощью CSP:
Content-Security-Policy: script-src 'self';
Этот код даст указание браузеру выполнить только ваши собственные скрипты домена.
Ответ 4
Если у вас есть доступ к веб-серверу и его окнам, вы можете добавить запись в файл Hosts, чтобы перенаправить адрес google на веб-приложение локального сервера, чтобы загрузить там javascript? (если вы соответствуете структуре папок ссылки javascript)
c:\windows\system32\drivers\etc\hosts
ajax.googleapis.com 127.0.0.1