Подтвердить что ты не робот

Как предотвратить внешний запрос 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 и вся страница.

введите описание изображения здесь

4b9b3361

Ответ 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