7

ローカルのhtmlファイル(javascriptを使用)からgoogle api(カレンダーv3)にアクセスすることは可能ですか?IISを介してファイルを提供する代わりに、ブラウザでc:\ temp \ gsotto\gsotto.htmを開きたい。

からファイルを提供すると機能します

http://localhost/ 

Webサーバーを介して。グーグルAPIコンソールで私は「ウェブアプリケーションのクライアントID」を持っています:

Redirect URIs:  http://localhost
JavaScript origins:     http://localhost

およびブラウザアプリの「シンプルなAPIアクセス」キー(リファラー付き)

Firebug shows me this when accessing through http://localhost/gsotto/gsotto.htm
GET http://localhost/gsotto/gsotto.htm
GET https://apis.google.com/js/client.js?onload=handleClientLoad
GET https://apis.google.com/_/apps-static/_/js/gapi/client....cb=gapi.loaded_0
GET https://ssl.gstatic.com/accounts/o/...-postmessagerelay.js
GET https://accounts.google.com/o/oauth2/auth?client_id=.....&authuser=0
GET https://ssl.gstatic.com/accounts/o/....-postmessage.js

and this when access through c:\...
GET https://apis.google.com/js/client.js?onload=handleClientLoad
GET https://apis.google.com/_/apps-static/_/js/gapi/client.....cb=gapi.loaded_0
GET https://ssl.gstatic.com/accounts/o/.....-postmessagerelay.js
and nothing more....

do i need to use other settings in the google api console for this to work?


<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <!--Add a button for the user to click to initiate auth sequence -->
    <button id="authorize-button" style="visibility: hidden">Authorize</button>
    <script type="text/javascript">
        // google calendar id
      var calId = "....";

      var clientId = "..."; // oAuth2 webapp
      var apiKey = "....";// Key for browser apps (with referers) 

      // google authentication scopes
      var scopes = 'https://www.googleapis.com/auth/calendar';
              //https://www.googleapis.com/auth/calendar.readonly

      // Use a button to handle authentication the first time.
      function handleClientLoad() {
          console.log('handleClientLoad');
        gapi.client.setApiKey(apiKey);
        window.setTimeout(checkAuth,1);
      }

      function checkAuth() {
          console.log('checkAuth');
          try {

        gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true}, handleAuthResult);
          }
          catch(e)
          {
              console.log('e');
              console.log(e);
          }
      }


      function handleAuthResult(authResult) {

          console.log('handleAuthResult');
        var authorizeButton = document.getElementById('authorize-button');
        if (authResult && !authResult.error) {
            console.log('result ok');
          authorizeButton.style.visibility = 'hidden';
          makeApiCall();
        } else {
          console.log('authresult null or error');
          console.log(authResult);
          authorizeButton.style.visibility = '';
          authorizeButton.onclick = handleAuthClick;
        }
      }

      function handleAuthClick(event) {
        console.log('handleAuthClick');
        gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: false}, handleAuthResult);
        return false;
      }

function makeApiCall() {
        console.log('makeApiCall');
  gapi.client.load('calendar', 'v3', function() {
    var request = gapi.client.calendar.events.list({
      'calendarId': calId
    });

    request.execute(function(resp) {
        console.log('result:');
        console.log(resp);

      for (var i = 0; i < resp.items.length; i++) {
        var li = document.createElement('li');
        li.appendChild(document.createTextNode(resp.items[i].summary));
        document.getElementById('events').appendChild(li);
      }
    });
  });
}
    </script>
    <script src="https://apis.google.com/js/client.js?onload=handleClientLoad"></script>
    <div id="content">
    <ul id="events"></ul>
    </div>
  </body>
</html>
4

1 に答える 1

5

ブラウザによっては、file://クロスサイト(またはクロスプロトコル)の理由でプロトコルから実行する場合、AJAXが使用できないことがわかります。動作していると思われるGETはXHR/AJAXではなく<script>タグであるため、最近のほとんどのブラウザーでは答えは「いいえ」です。こちらの説明を参照してください。--allow-file-access-from-filesand --disable-web-securitylink )を使用してChromeを実行すると、動作する可能性があります。

于 2012-12-22T22:18:26.150 に答える