2015-07-21 67 views
1

我一直在嘗試這一段時間,我完全停留在這個問題上,希望有人能給我一些想法,我可以如何解決這個問題。 問題在這裏。requireJS和Google+ Javascript API

我想使用Google Javascript API進行我的網站登錄。 我的JavaScript

define(function (require) { 
    init = function(){ 
     require(['https://apis.google.com/js/platform.js?onload=renderButton'], function(gapi){ 
      renderButton(); 
     }); 
    }, 
    renderButton = function(){ 
     console.log("renderbutton called"); 
     gapi.signin2.render('google-signin', { 
      'scope': 'https://www.googleapis.com/auth/plus.login', 
      'width': 151, 
      'height': 25, 
      'longtitle': true, 
      'theme': 'dark' 
     }); 
    }, 
}); 

當我做到這一點,則返回錯誤消息「的ReferenceError:GAPI沒有定義」

所以我曾嘗試如下,但沒有運氣。

define(function (require) { 
    init = function(){ 
     require(['https://apis.google.com/js/platform.js?onload=renderButton'], function(gapi){ 
      renderButton(gapi); 
     }); 
    }, 
    renderButton = function(gapi){ 
     console.log("renderbutton called"); 
     gapi.signin2.render('google-signin', { 
      'scope': 'https://www.googleapis.com/auth/plus.login', 
      'width': 151, 
      'height': 25, 
      'longtitle': true, 
      'theme': 'dark' 
     }); 
    }, 
}); 
+0

不能完全確定,但我認爲你只需要GAPI傳遞到renderButton .. IE,renderButton(GAPI); 。需求似乎將您的gapi模塊加載到當前作用域中,但它不能被另一個並行函數的作用域訪問,而不作爲參數傳遞 – Hypaethral

+0

Thanks Grumble Snatch。我已經如上所述嘗試過了。我不確定那是你的意思。我明白你的意思,但仍然抱怨gapi沒有定義。 – redpotato

回答

0

我知道我問過這個問題,但我終於能夠使它工作。 我不知道我是否正確的方式。 所以請讓我知道是否有更好的方法來處理。

我的JavaScript

define(function (require) { 
    "use strict"; 
    var $ = require('jquery'), 
    .... 
    .... 
    .... includes other codes 

    require(['https://apis.google.com/js/platform.js'], function(){ 
     var renderButton; 

     window.gapi.signin2.render('google-signin', { 
      'scope': 'https://www.googleapis.com/auth/plus.login', 
      'width': 151, 
      'height': 25, 
      'longtitle': true, 
      'theme': 'dark', 
      'onsuccess': onSuccess, 
      'onfailure': onFailure 
     }); 
    }); 
} 
1

我成立了一個requirejs配置是這樣的:

window.require = { 
    "shim": { 
     "gapi": { 
      "exports": "gapi" 
     } 
    }, 
    "paths": { 
     "gapi": "https://apis.google.com/js/platform" 
    } 
} 

然後,我可以這樣做:

require(['gapi'], function (gapi) { 
    gapi.load("", function() { 
    // ..whatever.. 
    }); 
}); 

這......一個奇怪的圖書館雖然。我正在嘗試簽署庫並最終需要這樣做

gapi.load('auth2', function() { 
    gapi.auth2.init({ 
    client_id: GOOGLE_SIGN_IN_CLIENT_ID 
    }); 
    gapi.load('signin2', function() { 
    gapi.signin2.render('g-signin', options); 
    }); 
}); 

因此,您可能需要設置'google-signin'加載程序。 requirejs loader plugins。基本上,它是這樣的:

define('gapi', { 
    load: function (name, req, onload, config) { 
     //req has the same API as require(). 
     req(['gapi'], function (gapi) { 
      gapi.load(name, function() { 
       onload(gapi[name]); 
      }); 
     }); 
    } 
}); 

然後你可以:

require(['gapi!auth2', 'gapi!signin2'], function (auth2, signin2) { 
    auth2.init({client_id: CLIENTID}); 
    signin2.render(...); 
});