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

Какой лучший отступ, если 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.

4b9b3361

Ответ 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 и отобразить сообщение "Сторонние компоненты временно недоступны". Пожалуйста, попробуйте позже ".

Это продемонстрирует пользователю, что

  • мы знаем, что происходит
  • теперь мы ничего не можем с этим сделать
  • но это не совсем неожиданно и все еще как-то под контролем