2016-09-21 3 views
45

Google Chrome начал реализацию Blocking the load of cross-origin, parser-blocking scripts inserted via document.write in the main frame на медленных сетях, что вызывает следующую ошибку:Скрипт-блокирующий скрипт с перекрестным происхождением вызывается через document.write - как его обойти?

A Parser-blocking, cross-origin script, http://example.org/script.js , is invoked via document.write. This may be blocked by the browser if the device has poor network connectivity.

Однако мой веб-страницы требует загрузки сценария третьей стороны синхронно, используя document.write('<script src="..."></script>'). Как обойти эту блокаду?

Подробнее об этом изменении:

+1

Почему это должно быть через document.write? – CBroe

+1

@CBroe Потому что это сценарий, который я получил от стороннего производителя, и я не уполномочен его менять (плюс браузеры не должны внезапно ломать давние страницы). – niutech

+1

Хорошо, что третьей стороне потребуется изменить код, который они выдают клиентам, в любом случае, если они хотят, чтобы он продолжал работать в браузерах, которые это реализуют. Поэтому вы должны поговорить с ними. – CBroe

ответ

22

Согласно Google Developers article, вы можете:

+6

Вы уверены, что ссылка на отправку является подлинной, я как раз собирался заполнить ее, когда я заметил, что это просто форма Google, которую кто-то создал, и имеет орфографические ошибки и грамматические ошибки во всем этом ... Не выглядит подлинным. – Lee

+5

@Lee Эта ссылка появляется в официальной статье [https://developers.google.com/web/updates/2016/08/remove-document-write # how_do_i_fix_this) выше. – niutech

+0

Использование асинхронных скриптов означает, что ваша страница может отображаться быстрее. Вместо того, чтобы заставить пользователей ждать, пока скрипт завершит загрузку до отображения страницы, сценарий можно загрузить в фоновом режиме. Хотя большинство сценариев первоначально были синхронными, более новые версии скриптов были разработаны для асинхронной загрузки. Проверьте https://developers.google.com/speed/docs/insights/UseAsync –

14

@niutech У меня был подобный вопрос, который вызывается Ракетно Loader модуля по Cloudflare. Просто отключите его для веб-сайта, и он разобратся со всеми вашими проблемами.

+0

Я очень рад найти этот ответ ... Вы спасли меня много времени. Благодаря! – chelder

+0

У меня такая же проблема с модулем Rocket Loader Cloudflare, который находится в бета-версии. Если есть больше людей, которые отправили его [в белый список Google] (https://docs.google.com/forms/d/e/1FAIpQLSdMQ7PfoVMob5OTXSgodoG5V1eNC5CyQ_qo4skbN62RDSEPcg/viewform), это может помочь – SHamel

+0

Это происходит со мной при первом доступе к моему сайту url и связано с активацией модуля Rocket Loader, но это очень важно, если я должен отключить его, потому что он дал мне несколько полезных моментов для понимания страницы google. Любой другой вариант? –

0

Не используйте document.write, вот обходной путь:

var script = document.createElement('script'); 
script.src = "...."; 
document.head.appendChild(script); 
+0

Много раз вы не можете изменить сторонний скрипт, который использует 'document.write'. – niutech

+0

@niutech Я думаю, что все перечисленные решения пытаются изменить загрузку синхронизации в async, но вы просите загрузить сторонний скрипт синхронно, тогда я думаю, что может быть сложно получить решение, если сторонний скрипт использует document.wrtie. Дайте мне знать, если найдете решение. – Gray

+0

Или поставить сторонний скрипт в том же домене вашего скрипта может решить эту проблему. Это решение требует обработки синхронизации между локальной копией и оригинальной копией. – Gray

Смежные вопросы