3

次のコードは、Google API JavaScript クライアントを使用する簡単な例であり、ハードコードされた短縮 URL の長い形式の URL を表示するだけです。

<script>
  function appendResults(text) {
    var results = document.getElementById('results');
    results.appendChild(document.createElement('P'));
    results.appendChild(document.createTextNode(text));
  }

  function makeRequest() {

    console.log('Inside makeRequest');

    var request = gapi.client.urlshortener.url.get({
      'shortUrl': 'http://goo.gl/fbsS'
    });

    request.execute(function(response) {
      appendResults(response.longUrl);
    });
  }

  function load() {

    gapi.client.setApiKey('API_KEY');
    console.log('After attempting to set API key');
    gapi.client.load('urlshortener', 'v1', makeRequest);
    console.log('After attempting to load urlshortener');
  }
</script>
<script src="https://apis.google.com/js/client.js?onload=load"></script>

テキスト「API_KEY」の代わりに実際の API キーを使用する場合を除きます。

コンソール出力は次のとおりです。

APIキーを設定しようとした後

urlshortener を読み込もうとした後

しかし、gapi.client.load への呼び出しのコールバック関数である makeRequest 関数の内部にある「Inside makeRequest」が表示されないため、関数が機能していない (または完了に失敗している) と思われます。

これがなぜそうなのか、そしてそれを修正する方法について誰かが光を当てることができますか?

前もって感謝します。

4

2 に答える 2

11

問題をグーグルで何時間も調べた後、サーバーではなくローカルマシンでこのファイルを実行していたことが問題であることがわかりました。

Chrome で上記のコードを実行すると、開発者コンソールに「メッセージを file:// に投稿できません。受信者のオリジンが null です。」というエラーが表示されます。

何らかの理由で、JavaScript は実際のサーバーまたは XAMPP や WAMP などで実行されている場合にのみ読み込まれます。

なぜこれが起こるのかを明らかにできる専門家がいるなら、学ぶのは本当に素晴らしいことです.

これが私のような他の初心者に役立つことを願っています:D

于 2012-07-12T09:03:56.840 に答える
5

短い答え ( http://code.google.com/p/google-api-javascript-client/issues/detail?id=46 ):

The JS Client does not currently support making requests from a file:// origin.

長い答え ( http://en.wikipedia.org/wiki/Same_origin_policy ):

The behavior of same-origin checks and related mechanisms is not well-defined
in a number of corner cases, such as for protocols that do not have a clearly 
defined host name or port associated with their URLs (file:, data:, etc.). 

This historically caused a fair number of security problems, such as the 
generally undesirable ability of any locally stored HTML file to access all 
other files on the disk, or communicate with any site on the Internet.
于 2013-02-26T03:23:03.070 に答える