Какой лучший отступ, если API Ajax Google недоступен (поскольку Google не разрешает его локально устанавливать)?
На моем сайте у меня есть:
...
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
...
script выше Google script для динамического загрузки других ресурсов.
(например, API диаграмм Google)
Это работает 99,99% времени.
Тем не менее, я просто получил клиента, который по некоторым причинам заставил свою компанию ограничивать доступ к google.com.
Как следствие этого мой сайт просто бросил ошибку JavaScript.
Теперь я знаю, как с этим справиться, и я могу проверить, существует ли window.Google.
но мой вопрос
"какой стандартный способ справиться с этим?"
Другими словами, если вы вставляете сторонний JavaScript, как лучше всего вы справляетесь с их JS, недоступным?
ПРИМЕЧАНИЕ: ОЧЕНЬ ВАЖНО
Вы не можете размещать код диаграммы локально или в интрасети.
СМОТРИТЕ часто задаваемые вопросы от Google: https://developers.google.com/chart/interactive/faq#localdownload
Можно ли загрузить и разместить код диаграммы локально или в интрасети?
К сожалению, наши условия обслуживания не позволяют загружать и сохранять или введите код Google.load или Google.visualization.
Ответы
Ответ 1
Решение заключается в том, что ваша клиентская компания просматривает свои политики фильтрации контента. Google совершенно ясно в своем предыдущем ответе относительно автономного доступа:
... для использования диаграмм ваш компьютер должен иметь доступ к http://www.google.com/jsapi.
Вы используете стороннее решение в соответствии с их положениями и условиями, что, естественно, устанавливает ограничения на то, как это решение может использоваться вашими клиентами. Вам нужно твердо стоять или найти более либерально-лицензированное решение. (Во всяком случае, вы, скорее всего, добьетесь успеха в убеждении ИТ-отдела своего клиента, чем просить Google изменить свой TOS.)
Для более общего случая API-интерфейсов сторонних производителей, которые могут не загружаться, но для которых вы можете сохранить локальную копию на своем сервере, см. этот вопрос.
Ответ 2
Нет реальной альтернативы. Из-за условий обслуживания Google вы не можете использовать API Google без доступа к google.com.
- Проверьте подключение к Google и пользователю iform, что функция недоступна
- Создайте свой собственный или используйте non-google api. Тем не менее вы можете использовать Google, если он доступен
Ответ 3
Вы можете попробовать это следующим образом:
Вместо прямой ссылки на библиотеки Google, которые вы хотите использовать, используйте ссылку, которая указывает на ваш сервер:
<script type="text/javascript" src="https://www.myserver.com/jsapi"></script>
Когда ваш сервер получает входящий запрос на этот URL-адрес, ваш сервер теперь обращается к Google с просьбой получить API и отправит ответ клиенту.
Это означает, что вы не устанавливаете API в любом месте локально или на сервере и всегда получаете самую актуальную версию непосредственно от Google. Людям также не нужен доступ к Google (как в упомянутой вами компании), и поэтому вы можете использовать свою услугу.
Ответ 4
Используйте Firebug или Chrome Dev Tools для проверки вашего HTML-источника после загрузки графиков. Получите доступ к сценариям в вашем браузере и сохраните их локально, а затем выполните их с вашего собственного сервера. Конечно, это не рекомендуется, но если у вас нет другого выбора...
Например, проверяя код одной из страниц, на которых я его использую, ядро script для библиотеки Google Charts находится по адресу: https://www.google.com/uds/api/visualization/1.0/3d781368978b51b3ca00a01566dccf40/format+en,default,corechart.I.js
Ответ 5
Используйте javascript window.onload, чтобы проверить, загружен ли api или нет, если нет, то загрузите его с вашего сервера.
Ответ 6
Вы уже знаете, как проверить, была ли загружена ваша библиотека (проверка объекта), если она терпит неудачу, чем то, что вы можете сделать при предоставлении ограничений:
Продолжайте проверять объект с помощью таймера и пытаться загрузить библиотеку, отображая сообщение для пользователя
В случае первого отказа, у вас есть еще два пути:
Остановка приложения и отображение ошибки: "Ошибка приложения... попробуйте позже"
Или загрузка другой библиотеки в качестве резервной копии
Ответ 7
Вы постепенно улучшаете или грамотно деградируете страницу? Если да, то что вы показываете пользователям без JavaScript для этой диаграммы? Стол? Список? Это то, что вы должны оставить на странице и только начать изменять его, как только Google JS доступен. Либо это, либо найти альтернативную библиотеку, такую как raphaeljs, которая позволяет сохранить весь ваш код в вашем проекте.
Ответ 8
IF (BIG IF), вы не беспокоитесь об интерактивности графиков Google и хотите отобразить их пользователю просто для просмотра - возможно, добавьте свой собственный javascript к нему, но не зависеть от Google Javascript вообще, это может превратиться диаграммы google в изображение, которое вы можете отобразить пользователю.
Также для этого требуется доступ для установки инструмента командной строки на сервере.
http://code.google.com/p/wkhtmltopdf/ - инструмент командной строки, который будет генерировать изображение с html-страницы. Если вы создадите простую страницу, на которой отображается только нужная диаграмма, и укажите инструмент wkhtmltoimage
в локальном html файле, он загрузит javascript Google Chart и сгенерирует диаграмму, а затем создаст изображение из результатов.
ДА Я понимаю, что это ОЧЕНЬ kludgy и добавляет большой инструмент для небольшой проблемы, но с ограничениями браузера и Условиями использования Google это решит большую часть проблемы.
Ответ 9
Вы можете попробовать перейти прямо к google, и если это не удастся (если Google ограничен), вы можете отбросить запрос с вашего сервера, который пересылает запрос с использованием CURL в google. Если это не сработает, Google, скорее всего, снизится. Это должно охватывать проблему, которую вы описали в своем вопросе, но на самом деле нет никакого исправления, если сам google действительно опустится. Тем не менее, он должен предоставить вашему приложению доступ к ограничениям домена, поскольку запрос будет перенаправлен на ваш сервер, а не прямо на google. Я использую эту архитектуру для всех запросов, чтобы у меня не было запросов ajax, направленных на случайные серверы. Это позволяет мне контролировать то, что взаимодействует с моим интерфейсом, используя мой backend. Для этого есть и другие преимущества, особенно если вы используете что-то вроде AngularJS с NodeJS, потому что вы можете разделить множество сторонних библиотек. Это, однако, выходит за рамки вашего вопроса!
В основном, он работает так (псевдокод):
If(!Browser->Google->Browser){
return Browser->MyServer->Google->MyServer->Browser;
}
Ответ 10
Ответ уже принят, но, тем не менее, я хотел бы оставить дополнительный аспект, содержащий подробный комментарий, сделанный мной выше.
Было принято, что Google Server - это единственное место, откуда можно загружать API. Мы не знаем, будет ли ИТ-менеджер клиента пересматривать свою политику в отношении контента, у них могут быть веские причины для этого.
Учитывая не-100% доступность всех компонентов по пути между пользовательским браузером и API Google, рано или поздно пользователь будет попадет в ситуацию с ошибкой; статистически это неизбежно.
То, что неприемлемо (и избегается) для пользователя, - это получить "неспецифическую" ошибку JS, заставляя его/ее полагать, что на странице есть ошибка. Таким образом, мое решение состояло бы в том, чтобы уловить неудачу загрузки API Google и отобразить сообщение "Сторонние компоненты временно недоступны". Пожалуйста, попробуйте позже ".
Это продемонстрирует пользователю, что
- мы знаем, что происходит
- теперь мы ничего не можем с этим сделать
- но это не совсем неожиданно и все еще как-то под контролем