2

我特别喜欢通过使用 Google Closure 来要求其他 javascript 类的能力,但我想知道是否可以使用 goog.require 来延迟加载其他 javascript 类。当我在页面加载后尝试使用 goog.require 时,它​​似乎刷新或变为空白 :( 任何按需获取脚本的方式,并且可能使用回调设置它,所以我可以在加载完成后运行一些 javascript ?

4

2 回答 2

4

闭包库模块管理器:

https://github.com/google/closure-library/blob/master/closure/goog/module/modulemanager.js

于 2010-12-17T14:44:08.113 回答
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 数据。

所有这些都表明您需要能够在脚本加载后调用页面上的函数。

于 2010-09-27T21:00:29.837 回答