13

私のサイトには次のものがあります。

...
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
...

上記のスクリプトは、他のリソースを動的にロードするためのGoogleスクリプトです。(例:Google Charts API)

これは99.99%の確率で機能します。しかし、私はちょうど何らかの理由で彼の会社がgoogle.comへのアクセスを制限しているクライアントを手に入れました。

この結果、私のWebサイトはJavaScriptエラーをスローしました。

これで、その処理方法がわかり、window.Googleが存在するかどうかを確認できます。でも私の質問は

「これに対処するための標準的な方法は何ですか?」

言い換えれば、サードパーティのJavaScriptを埋め込んだ場合、利用できないJSにどのように対処するのが最善でしょうか。

注:非常に重要

チャートコードをローカルまたはイントラネットでホストすることはできません。

GoogleのFAQを参照してください:https ://developers.google.com/chart/interactive/faq#localdownload

チャートコードをローカルまたはイントラネットでダウンロードしてホストできますか?

ごめん; Googleの利用規約では、Google.loadまたはGoogle.visualizationコードをダウンロードして保存またはホストすることはできません。

4

10 に答える 10

10

本当の代替手段はありません。Google の利用規約により、google.com にアクセスせずに Google API を使用することはできません。

  • Google への接続を確認し、機能が利用できないことをユーザーに通知します
  • 独自の API を開発するか、Google 以外の API を使用してください。それでも、可能であれば Google を使用できます
于 2012-11-08T07:35:36.920 に答える
9

解決策は、クライアントの会社がコンテンツ フィルタリング ポリシーを確認することです。Google は、オフライン アクセスに関する以前の回答で非常に明確です。

…グラフを使用するには、コンピュータがhttp://www.google.com/jsapiにライブ アクセスできる必要があります。

利用規約に従ってサードパーティのソリューションを使用しているため、クライアントによるそのソリューションの使用方法に当然制限が課されます。しっかりと立つか、より自由にライセンスされたソリューションを見つける必要があります。(いずれにせよ、 Google に TOS の変更を請願するよりも、クライアントの IT 部門を説得することに成功する可能性が高くなります。)


読み込まれない可能性があるが、サーバーにローカル コピーを保持すること許可されているサード パーティの JS API のより一般的なケースについては、この質問を参照してください。

于 2012-11-13T16:04:37.980 に答える
7

次のように試すことができます。

使用する Google ライブラリへの直接リンクを使用する代わりに、サーバーを指すリンクを使用します。

<script type="text/javascript" src="https://www.myserver.com/jsapi"></script>

サーバーがこの URL への受信リクエストを受け取ると、サーバーは Google に API を取得するリクエストを作成し、クライアントにレスポンスを送信します。

つまり、API をローカルまたはサーバーのどこにもインストールせず、常に最新のバージョンを Google から直接取得します。また、人々は(あなたが言及した会社のように)Googleにアクセスする必要がないため、あなたのサービスを使用できます.

于 2012-11-08T06:06:16.363 に答える
3

もし(BIG IF)あなたがグーグルチャートの双方向性について心配しておらず、見ているだけでそれらをユーザーに表示したいなら-多分あなた自身のジャバスクリプトをそれに追加するがグーグルジャバスクリプトに全く依存しない、これはグーグルチャートを変えることができるユーザーに表示できる画像に変換します。

また、これには、サーバーにコマンドラインツールをインストールするためのアクセス権が必要です。

http://code.google.com/p/wkhtmltopdf/は、htmlページから画像を生成するコマンドラインツールです。必要なグラフのみを表示する単純なページを作成し、wkhtmltoimageツールをローカルのhtmlファイルにポイントすると、Google Charts javascriptが読み込まれ、グラフが生成され、結果から画像が生成されます。

はい、これは非常に扱いにくく、小さな問題に大きなツールを追加していることを理解していますが、ブラウザの制限とGoogleの利用規約により、ほとんどの問題が解決されます。

于 2012-11-13T02:11:39.633 に答える
3

javascript window.onload を使用して、API がロードされているかどうかを確認します。ロードされていない場合は、サーバーからロードします。

于 2012-10-29T12:13:33.253 に答える
3

ページを段階的に強化していますか、それとも適切に劣化させていますか? もしそうなら、JavaScript を使用していないユーザーには、このグラフで何を表示しますか? テーブル?リスト?これはページに残すべきものであり、Google の JS が利用可能になってから変更を開始してください。それか、プロジェクト内にすべてのコードを保持できる raphaeljs のような代替ライブラリを見つけてください。

于 2012-11-12T11:33:45.230 に答える
3

チャート スクリプトが読み込まれたら、Firebug または Chrome Dev Tools を使用して HTML ソースを調べます。ブラウザでスクリプトにアクセスしてローカルに保存し、独自のサーバーから提供します。もちろん、これはお勧めしませんが、他に選択肢がない場合は...

たとえば、私が使用しているページの 1 つのコードを確認すると、Google Charts ライブラリのコア スクリプトは次の場所にあり ます。 ja,default,corechart.I.js

于 2012-10-29T11:33:25.027 に答える
3

ライブラリがロードされているかどうかをチェックする方法 (オブジェクトのチェック) が失敗した場合は、制約を与えることでできることを既に知っています。

タイマーでオブジェクトをチェックし続け、ライブラリのダウンロードを試み、ユーザーにメッセージを表示します

最初の 1 つが失敗した場合、再度 2 つの方法があります: アプリケーションを停止してエラーを表示する: 「アプリケーション エラー... 後で試してください」またはフォールバックとして別のライブラリをダウンロードする

于 2012-11-07T10:31:55.510 に答える
2

グーグルに直接行くことを試みることができ、それが失敗した場合(グーグルが制限されている場合)、CURLを使用してグーグルにリクエストを転送するサーバーからリクエストをバウンスすることができます。それがうまくいかない場合は、Googleがダウンしている可能性があります。これはあなたがあなたの質問で説明した問題をカバーするはずですが、グーグル自体が実際にダウンした場合の実際の修正はありません。ただし、リクエストはGoogleに直接ルーティングされるのではなく、サーバーにルーティングされるため、ドメイン制限を回避してアプリケーションにアクセスできるようにする必要があります。私はすべてのリクエストにこのアーキテクチャを使用しているため、ajaxリクエストがランダムサーバーにルーティングされることはありません。これにより、バックエンドを使用してフロントエンドと対話するものを制御できます。これには他にも利点がありますが、特に、NodeJSでAngularJSのようなものを使用している場合は、サードパーティのライブラリの多くを分離できるためです。ただし、これはあなたの質問の範囲を超えています!

基本的に、これは次のように機能します(擬似コード):

If(!Browser->Google->Browser){
    return Browser->MyServer->Google->MyServer->Browser;
}  
于 2012-11-13T21:31:45.553 に答える
1

回答はすでに受け入れられていますが、上記のコメントについて詳しく説明する追加の側面を残したいと思います....

API をロードできる唯一の場所は Google サーバーであることが認められています。クライアントの IT マネージャーがコンテンツ ポリシーを再考するかどうかはわかりませんが、それには正当な理由があるかもしれません。

ユーザー ブラウザと Google API の間のパスにあるすべてのコンポーネントの可用性が 100% ではない場合、遅かれ早かれユーザーエラー状態に陥ります。統計的にこれは避けられません。

ユーザーにとって受け入れられない (そして回避できる) のは、ページにバグがあるとユーザーに信じ込ませる「不特定の」JS エラーを受け取ることです。したがって、私の解決策は、Google API の読み込みの失敗をトラップし、「サードパーティ コンポーネントが一時的に利用できません - 後で試してください」というメッセージを表示することです。

これは、ユーザーに次のことを示します。

  1. 私たちは何が起こっているか知っています
  2. それについて今私たちができることは何もありません
  3. しかし、それは完全に予期せぬことではなく、まだ何らかの形で制御されています
于 2012-11-20T14:10:56.220 に答える