Как можно было бы попытаться загрузить размещенный jQuery в Google (или другие размещенные в Google библиотеки), но загрузить мою копию jQuery, если попытка Google не удалась?
Я не говорю, что Google ненадежен. В некоторых случаях копия Google блокируется (например, в Иране).
Я установил бы таймер и проверил бы для объекта jQuery?
Какова будет опасность того, что обе копии будут получены?
На самом деле не нужно искать ответы типа «просто воспользуйтесь Google» или «просто используйте свой». Я понимаю эти аргументы. Я также понимаю, что пользователь, скорее всего, будет кэшировать версию Google. Я думаю о запасных вариантах для облака в целом.
Редактировать: эта часть добавлена ...
Так как Google предлагает использовать google.load для загрузки библиотек ajax, и когда это сделано, он выполняет обратный вызов, мне интересно, является ли это ключом к сериализации этой проблемы.
Я знаю, это звучит немного безумно. Я просто пытаюсь понять, можно ли это сделать надежным способом или нет.
Обновление: jQuery теперь размещен на CDN от Microsoft.
источник
Ответы:
Вы можете достичь этого следующим образом:
Это должно быть на вашей странице,
<head>
а любые готовые обработчики событий jQuery должны быть в<body>
чтобы избежать ошибок (хотя это не является надежным!).Еще одна причина не использовать размещенный в Google jQuery заключается в том, что в некоторых странах доменное имя Google запрещено.
источник
Самый простой и чистый способ сделать это на сегодняшний день:
источник
XHTML 1.0
иHTML 4.01
type="text/javascript"
части, поэтому, если вы пишете html для старых браузеров, обратите внимание, что теперь вам придется добавить это.type="text/javascript"
было ненужным и в старых браузерах, так как все они по умолчанию были в Javascript. Действительно старые браузеры смотрели наlanguage
атрибут; но даже тогда Javascript был по умолчанию, если атрибут отсутствовал.<script src="//cdn1.com/jquery.js"></script> <script>window.jQuery || document.write('<script src="//cdn2.com/jquery.js"><\/script>')</script> <script>window.jQuery || document.write('<script src="local/jquery.js"><\/script>')</script>
Кажется, это работает для меня:
Как это работает, чтобы использовать
google
объект, вызывая http://www.google.com/jsapi нагрузки наwindow
объект. Если этот объект отсутствует, мы предполагаем, что доступ к Google отсутствует. Если это так, мы загружаем локальную копию, используяdocument.write
. (Я использую свой собственный сервер в этом случае, пожалуйста, используйте свой собственный для тестирования этого).Я также проверяю на наличие
window.google.load
- я также мог бы сделатьtypeof
проверить, что вещи являются объектами или функциями, в зависимости от ситуации. Но я думаю, что это делает трюк.Вот только логика загрузки, поскольку подсветка кода, похоже, не работает, поскольку я разместил всю HTML-страницу, которую я тестировал:
Хотя, должен сказать, я не уверен, что, если это беспокоит посетителей вашего сайта, вам вообще стоит возиться с API библиотек Google AJAX .
Интересный факт : вначале я пытался использовать для этого блок try..catch в разных версиях, но не смог найти такую же чистую комбинацию, как эта. Мне было бы интересно увидеть другие реализации этой идеи, просто в качестве упражнения.
источник
Если у вас есть встроенный Modernizr.js на вашем сайте, вы можете использовать встроенный yepnope.js для асинхронной загрузки ваших скриптов, в том числе jQuery (с резервным режимом).
Это загружает jQuery из Google-CDN. После этого проверяется, был ли jQuery успешно загружен. Если нет («нет»), загружается локальная версия. Также загружаются ваши личные скрипты - «оба» указывает, что процесс загрузки инициируется независимо от результата теста.
Когда все процессы загрузки завершены, выполняется функция, в случае «MyApp.init».
Я лично предпочитаю этот способ асинхронной загрузки скрипта. И поскольку я полагаюсь на функциональные тесты, предоставляемые modernizr при создании сайта, я все равно встраиваю его в сайт. Так что на самом деле нет накладных расходов.
источник
yepnope.js
устарел. см. stackoverflow.com/questions/33986561/…Здесь есть несколько отличных решений, но я хотел бы сделать еще один шаг в отношении локального файла.
В случае, когда Google терпит неудачу, он должен загружать локальный источник, но, возможно, физический файл на сервере не обязательно является лучшим вариантом. Я поднял этот вопрос, потому что в настоящее время я внедряю то же решение, только я хочу вернуться к локальному файлу, который генерируется источником данных.
Мои причины в том, что я хочу иметь некоторую рассудительность, когда дело доходит до отслеживания того, что я загружаю из Google, и того, что у меня есть на локальном сервере. Если я хочу изменить версии, я хочу, чтобы моя локальная копия синхронизировалась с тем, что я пытаюсь загрузить из Google. В среде, где есть много разработчиков, я думаю, что лучшим подходом было бы автоматизировать этот процесс, чтобы все, что нужно было сделать, это изменить номер версии в файле конфигурации.
Вот мое предлагаемое решение, которое должно работать в теории:
Теоретически, если мой код написан правильно, все, что мне нужно сделать, это изменить номер версии в конфигурации моего приложения, а затем Viola! У вас есть запасное решение, которое автоматизировано, и вам не нужно поддерживать физические файлы на вашем сервере.
Что все думают? Может быть, это излишне, но это может быть элегантный способ поддержки ваших библиотек AJAX.
Желудь
источник
После того, как вы попытаетесь включить копию Google из CDN.
В HTML5 вам не нужно устанавливать
type
атрибут.Вы также можете использовать ...
источник
[Violation] Avoid using document.write().
Возможно, вы захотите использовать свой локальный файл в качестве последнего средства.
Похоже, что в настоящее время собственный CDN jQuery не поддерживает https. Если это так, то вы можете сначала загрузить оттуда.
Итак, вот последовательность: Google CDN => Microsoft CDN => Ваша локальная копия.
источник
Условно загрузите последнюю / устаревшую версию jQuery и отступление:
источник
jQuery
переменную)Как проверить неопределенную переменную в JavaScript
Как включить файл JavaScript в другой файл JavaScript?
источник
Из-за проблемы запрета Google я предпочитаю использовать cdn от Microsoft http://www.asp.net/ajaxlibrary/cdn.ashx
источник
Вот отличное объяснение этого!
Также реализует задержки загрузки и тайм-ауты!
http://happyworm.com/blog/2010/01/28/a-simple-and-robust-cdn-failover-for-jquery-14-in-one-line/
источник
Для тех, кто использует ASP.NET MVC 5, добавьте этот код в ваш BundleConfig.cs, чтобы включить CDN для jquery:
источник
ОБНОВЛЕНИЕ:
Этот ответ оказался неправильным. Пожалуйста, смотрите комментарии для реального объяснения.
Большинство из вас ответили на вопрос, но что касается заключительной части:
Ни один на самом деле. Вы бы потратили пропускную способность, могли бы добавить несколько миллисекунд, загружая вторую бесполезную копию, но это не повредит, если они оба пройдут. Вы должны, конечно, избегать этого, используя методы, упомянутые выше.
источник
Я сделал Gist, который должен динамически загружать jQuery, если он еще не загружен, и если источник не работает, он переходит к запасным вариантам (сшитым из множества ответов): https://gist.github.com/tigerhawkvok/9673154
Пожалуйста, обратите внимание, что я планирую держать Gist в курсе, но не этот ответ, для чего это стоит!
источник
Google Hosted JQuery
Резервное копирование / резервный план!
Ссылка: http://websitespeedoptimizations.com/ContentDeliveryNetworkPost.aspx
источник
Я считаю, что должен экранировать последний <to \ x3C в строке. Когда браузер видит, он считает, что это конец блока скрипта (поскольку анализатор HTML не имеет представления о JavaScript, он не может различить то, что просто появляется в строке, и то, что фактически предназначено для завершения скрипта. элемент). Поэтому появление буквально в JavaScript, который находится внутри HTML-страницы, (в лучшем случае) приведет к ошибкам и (в худшем случае) станет огромной дырой в безопасности.
источник
Или
Не будет работать, если версия cdn не загружена, потому что браузер будет проходить через это условие и во время него все еще загружает остальные javascripts, которым требуется jQuery, и он возвращает ошибку. Решением было загрузить сценарии через это условие.
источник
Почти все публичные CDN довольно надежны. Однако, если вы беспокоитесь о заблокированном домене Google, вы можете просто использовать альтернативный jQuery CDN . Однако в таком случае вы можете предпочесть сделать это противоположным образом и использовать какой-либо другой CDN в качестве предпочтительного варианта и использовать Google CDN, чтобы избежать неудачных запросов и времени ожидания:
источник
Используя синтаксис Razor в ASP.NET, этот код обеспечивает резервную поддержку и работает с виртуальным корнем:
Или сделайте помощника ( обзор помощника ):
и используйте это так:
источник
CdnScript
помощником вам потребуется только одна строка кода на скрипт . Чем больше у вас сценариев, тем больше отдача.try { for (Script s : ...) cdnLoad(s); } catch (...) { for (Script s : ...) ownLoad(s); }
. Переводить это в кучуif
с может быть кошмаром.Несмотря на то, что запись
document.write("<script></script>")
для jQuery более проста, Chrome выдает ошибку проверки в этом случае. Поэтому я предпочитаю ломать слово «сценарий». Так становится безопаснее, как указано выше.Для долгосрочных проблем было бы лучше регистрировать запасные варианты JQuery. В приведенном выше коде, если первый CDN недоступен, JQuery загружается из другого CDN. Но вы можете захотеть узнать этот ошибочный CDN и удалить его навсегда. (этот случай очень исключительный) Также лучше регистрировать проблемы с резервированием. Таким образом, вы можете отправить ошибочные дела с AJAX. Поскольку JQuery не определен, вы должны использовать vanilla javascript для запроса AJAX.
источник
Невозможно загрузить ресурс из внешнего хранилища данных вне вашего контроля. Поиск пропущенных функций совершенно ошибочен как средство избежать перерыва, как описано здесь: http://www.tech-101.com/support/topic/4499-issues-using-a-cdn/
источник
Еще один запасной вариант, который заменяет ajax.googleapis.com на cdnjs.cloudflare.com :
источник
Вы можете использовать код как:
Но также есть библиотеки, которые вы можете использовать для настройки нескольких возможных откатов для ваших скриптов и оптимизации процесса загрузки:
Примеры:
basket.js я думаю лучший вариант на данный момент. Будет кэшировать ваш скрипт в localStorage, что ускорит следующие загрузки. Самый простой вызов:
Это вернет обещание, и вы можете сделать следующий вызов в случае ошибки или загрузить зависимости в случае успеха:
RequireJS
yepnope
источник