我特别喜欢使用Google Closure来要求其他javascript类的能力,但我想知道是否可以使用goog.require来延迟加载其他javascript类。当我在页面加载后尝试使用goog.require时,它似乎刷新或变为空白:( 有没有办法按需获取脚本,也许可以通过回调设置它,所以我可以在加载完成后运行一些javascript?
答案 0 :(得分:4)
Closure Library ModuleManager:
https://github.com/google/closure-library/blob/master/closure/goog/module/modulemanager.js
答案 1 :(得分:3)
goog.require
不适用于加载任何脚本。但是,根据需要,延迟加载脚本文件没有什么特别之处。只需动态创建节点并将其添加到您的页面:
function require(src)
{
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
document.body.appendChild(script);
}
上述函数将从src
参数指定的URL加载脚本。
回调是另一回事。加载脚本后,您不会触发事件。如果您希望在加载脚本时收到通知,则需要从脚本本身通知已加载的脚本。例如,您可以在页面上调用预定义函数作为要加载的javascript文件中的最后一个语句。调用此函数后,您就知道脚本已完成加载。但是,要做到这一点,您需要能够修改加载的脚本文件。
已加载通知脚本的类似方法与JSONP一起使用。使用上面相同的方法检索JSONP数据 - 向页面添加动态创建的脚本节点。但是,默认情况下,从服务器返回数据不会导致状态更改。需要函数调用来指示已发生的事情(例如,数据已到达)。使用JSONP,您可以在JSONP请求的URL中指定函数的名称。然后,服务器返回一段javascript,其中调用您指定的函数,在参数中传递JSON数据。
所有这些都是为了建议您在脚本加载后需要能够在页面上调用函数。