我的 GWT 应用程序中有一些外部 Javascript 文件,我只想在用户访问需要它们的部分时下载这些文件。我将 JS 文件包含在 UiBinder 页面中,如下所示:
<g:HTMLPanel>
<script src="blah.js"/>
</g:HTMLPanel>
加载视图后不一定会立即下载文件,因此当我加载视图时,我会检查是否存在异常,指示无法访问外部代码并重试,直到可以创建视图而不会出现异常。
这适用于 Firefox,但不适用于 IE7/IE8。我使用 AJAX 版来跟踪 IE 中发生的事情,并请求了该文件,但它没有下载任何内容,大小为 0。Web 服务器访问日志没有显示该文件被请求。
知道发生了什么吗?
还是有更好的方法来做到这一点?到目前为止,我所做的调查并没有表明 GWT 有一种方便的方法来做到这一点。
更新:
虽然我们还没有使用 2.4,但为了尝试,我复制了 ScriptInjector 所需的源文件,并尝试按照 Thomas 的建议使用它。JS 文件在两个浏览器中都正确下载,但我收到“$wnd.xxxx 未定义”异常,表明无法找到外部脚本中的引用。在 onSuccess() 调用从脚本注入返回之前,我不会尝试加载我的小部件 - 所以我的代码看起来像这样:
ScriptInjector.fromUrl("../xxxx.js").setCallback(
new Callback<Void, Exception>() {
public void onFailure(Exception reason) {
Window.alert("Script load failed.");
}
public void onSuccess(Void result) {
Window.alert("Script load success.");
MyWidget widget = new MyWidget();
client.onSuccess(widget); // adds the widget to the view
}
}).inject();
我也没有看到在 Firebug 中添加到 DOM 的 JS 文件引用,但我想知道这是否是因为它们被添加到页面的 GWT 部分的 DOM,而不是实际的 index.jsp。