我正在玩Google Drive API,并注意到他们正在调用client.js的handleClientLoad
函数onload
。
<script src="https://apis.google.com/js/client.js?onload=handleClientLoad"></script>
试图避免创建全局变量,我想我会从创建另一个js文件开始,该文件将包含一个模块模式并返回handleClientLoad
。
var module = (function (window, $) {
'use strict';
var module = {
handleClientLoad: function () {
console.log('ok, can access');
}
};
return module;
}(window, jQuery));
然后我假设我可以通过执行handleClientLoad
来调用module.handleClientLoad
,但这似乎无法正常工作。
<script src="scripts/main.js"></script>
<script src="https://apis.google.com/js/client.js?onload=module.handleClientLoad"></script>
问题:
是否可以从client.js的onload调用module.handleClientLoad
?
追加onload
并从脚本文件中调用函数看起来很草率和突兀,不是吗?是否有更清晰的方法来了解client.js何时加载?
答案 0 :(得分:1)
您是否尝试过调试器,是否确定模块。 hanfleClientLoad在回调被触发时存在?
您可以轮询gapi.client作为全局对象的存在。在调用其方法之前,先给它几毫秒进行初始化。
答案 1 :(得分:1)
我发现jQuery.getScript()
对此很有效。 Documentation here
在html页面中包含<script>
标记,我只是在js文件中包含以下行:
jQuery.getScript( "https://apis.google.com/js/api.js", handleClientLoad );
您可能需要对模块的结构方式稍作调整,但我认为这比将参数传递到<script>
标签更容易(至少我发现它更容易)。