requireJS和谷歌+;Javascript API
我已经尝试了一段时间,我完全陷入了这个问题,希望有人能给我一些想法,我可以如何解决这个问题。 问题就在这里 我想使用谷歌Javascript API登录我的网站。 我的javascript是requireJS和谷歌+;Javascript API,javascript,requirejs,Javascript,Requirejs,我已经尝试了一段时间,我完全陷入了这个问题,希望有人能给我一些想法,我可以如何解决这个问题。 问题就在这里 我想使用谷歌Javascript API登录我的网站。 我的javascript是 define(function (require) { init = function(){ require( ['https://apis.google.com/js/platform.js?onload=renderButton'], function(gapi){
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'
});
},
});
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
});
});
}
当我这样做时,它返回带有“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'
});
},
});
我知道我问了这个问题,但我最终还是成功了。 我不确定我的方法是否正确。 所以,如果有更好的方法,请告诉我 我的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'
});
},
});
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
});
});
}
我设置了一个requirejs配置,如下所示:
window.require = {
"shim": {
"gapi": {
"exports": "gapi"
}
},
"paths": {
"gapi": "https://apis.google.com/js/platform"
}
}
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'], 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);
});
});
因此,您可能需要设置一个“谷歌登录”加载程序。基本上是这样的:
window.require = {
"shim": {
"gapi": {
"exports": "gapi"
}
},
"paths": {
"gapi": "https://apis.google.com/js/platform"
}
}
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(...);
});
不完全确定,但我认为你只需要将gapi传递给renderButton。。例如,renderButton(gapi);。Require似乎将您的gapi模块加载到当前作用域中,但如果不作为参数传递,则无法被另一个并行函数的作用域访问。多亏了grack的抱怨。我已经试过了。我不确定你的意思。我理解你的意思,但仍然有人抱怨gapi没有定义。显然,这似乎不能正常工作(不再),因为
define('gapi')
覆盖了shim
中的一个。因此,您实际上需要在define()
中使用不同的名称来避免这种冲突。你能证实吗?