2015-07-21 62 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(...); 
});