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】:

使用innerHTMLHTMLPanel 使用)插入的脚本元素不会被执行。

您必须使用ScriptInjector 将脚本动态注入您的页面。

【讨论】:

ScriptInjector 还不是一个选项,我们还没有到 2.4。不过,这为我指明了一个有用的方向,我查找了有关 innerHTML 怪癖的一些信息,看起来可能有一两个我可以尝试的技巧。 我还是尝试了 ScriptInjector,并且经过了几次 hack,我在两个浏览器中都下载了文件。但无论哪种方式,我的小部件现在似乎都无法识别外部脚本(请参阅问题的更新)。

以上是关于GWT - IE 不下载 UiBinder 中包含的外部脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GWT 离线应用程序中包含外部 Javascript

在行中包含大图像时,如何使 IE 11 尊重表格中的列宽?

您对在您的页面中包含 ie7.js 或 ie8.js 感觉如何?

apache中https配置好后使用谷歌,ie正常,使用360和360极速浏览器有问题,出现连接采用新型加密套件进行了加密,而且此页中包含了不安全的资源

我想在选择框中垂直对齐文本

IE浏览器URL中的查询条件中包含中文时报404的解决办法