【发布时间】:2011-11-09 20:14:21
【问题描述】:
我的 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。
【问题讨论】:
-
看起来 GWT 正在完成它的工作并获取请求的脚本,但是 IE 或您的服务器没有下载它。 GWT 没有任何功能来确保正确解释 DOM,所以我认为您必须在 GWT 之外寻找这个功能。
-
“外部”是指它们未托管在您的应用程序中吗?比如像谷歌托管的 jQuery?
-
它托管在应用程序中,我的意思是我没有编写它,也没有维护它。
标签: internet-explorer gwt uibinder external-script