Javascript 刷新与重新加载(无法调用未定义的方法&x27;授权&x27;)GAPI
我有一个简单的gapi(谷歌硬盘)应用程序,我想连接到它。发生了一些奇怪的事情。我有演示的样品Javascript 刷新与重新加载(无法调用未定义的方法&x27;授权&x27;)GAPI,javascript,html,google-app-engine,google-drive-api,Javascript,Html,Google App Engine,Google Drive Api,我有一个简单的gapi(谷歌硬盘)应用程序,我想连接到它。发生了一些奇怪的事情。我有演示的样品 为什么会这样 html应该与您的第一个代码片段一致。你需要弄清楚为什么“什么都没发生”。谷歌库中可能存在一些限制,阻止它调用模块。尝试用一个全局函数替换驱动器。\u handleClientLoad,该函数反过来调用您的模块。也许可以在控制台上洒一些日志或调试器,看看执行了什么和没有执行什么。不知道为什么,但我不能调用驱动器。\u handleClientLoad来自.client.js?onload
为什么会这样 html应该与您的第一个代码片段一致。你需要弄清楚为什么“什么都没发生”。谷歌库中可能存在一些限制,阻止它调用模块。尝试用一个全局函数替换
驱动器。\u handleClientLoad
,该函数反过来调用您的模块。也许可以在控制台上洒一些日志或调试器,看看执行了什么和没有执行什么。不知道为什么,但我不能调用驱动器。\u handleClientLoad
来自.client.js?onload=
函数,所以创建一个像bellow这样的公共函数是可行的
function handleClientLoad() {
window.setTimeout(Drive._checkAuth, 1);
}
// ..client.js?onload=handleClientLoad
如果我在同一个文件中创建一个新的
函数test(){alert(1)}
,并将其称为?onload=test
,它就不起作用了。我只是注意到了URL。你下载了js库的本地副本吗?是的,我尝试了api.google.com/代码>一个没有区别。这与跨域有关吗?必须按照快速入门说明从google加载google js。拥有自己的副本是无效的。如上所述,我尝试了它,但它仍然不起作用。您问题的答案可能是,为了刷新,js被缓存,因此不会重新解析,因此其中创建gapi对象的js语句没有被执行。
var Drive = {
_CLIENT_ID: '61183508825.apps.googleusercontent.com',
_SCOPES: 'https://www.googleapis.com/auth/drive.file',
_rootid: null,
authorised: false,
_auth: function() {
gapi.auth.authorize({
'client_id': Drive._CLIENT_ID, 'scope': Drive._SCOPES, 'immediate': true
},Drive._handleAuthResult);
},
_handleClientLoad: function() {
window.setTimeout(Drive._auth, 1);
},
_handleAuthResult: function(authResult) {
if (authResult && !authResult.error) {
// Access token has been successfully retrieved, requests can be sent to the API.
Drive._validAuth();
} else {
// No access token could be retrieved, show the button to start the authorization flow.
Drive._invalidAuth();
}
},
_invalidAuth: function(){
Drive.authorised = false;
console.log("invalid authorization");
},
_validAuth: function(){
Drive.authorised = true;
console.log("successfully authorization");
},
}
function handleClientLoad() {
window.setTimeout(Drive._checkAuth, 1);
}
// ..client.js?onload=handleClientLoad