GWT - IE 不下载 UiBinder 中包含的外部脚本
Posted
技术标签:
【中文标题】GWT - IE 不下载 UiBinder 中包含的外部脚本【英文标题】:GWT - IE not downloading external scripts included in UiBinder 【发布时间】: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? 它托管在应用程序中,我的意思是我没有编写它,也没有维护它。 【参考方案1】:您需要告诉 ScriptInjector 将脚本添加到顶层窗口。
ScriptInjector.fromUrl(scriptUrl)
.setWindow(ScriptInjector.TOP_WINDOW)
.setCallback(new Callback<Void, Exception>()
@Override
public void onSuccess(Void result)
//script loaded OK
@Override
public void onFailure(Exception reason)
//TODO script injection failed
).inject();
【讨论】:
【参考方案2】:使用innerHTML
(HTMLPanel
使用)插入的脚本元素不会被执行。
您必须使用ScriptInjector
将脚本动态注入您的页面。
【讨论】:
ScriptInjector 还不是一个选项,我们还没有到 2.4。不过,这为我指明了一个有用的方向,我查找了有关 innerHTML 怪癖的一些信息,看起来可能有一两个我可以尝试的技巧。 我还是尝试了 ScriptInjector,并且经过了几次 hack,我在两个浏览器中都下载了文件。但无论哪种方式,我的小部件现在似乎都无法识别外部脚本(请参阅问题的更新)。以上是关于GWT - IE 不下载 UiBinder 中包含的外部脚本的主要内容,如果未能解决你的问题,请参考以下文章
如何在 GWT 离线应用程序中包含外部 Javascript
您对在您的页面中包含 ie7.js 或 ie8.js 感觉如何?
apache中https配置好后使用谷歌,ie正常,使用360和360极速浏览器有问题,出现连接采用新型加密套件进行了加密,而且此页中包含了不安全的资源