GWT中是否有关于将要下载哪个片段的通知



我们的GWT应用程序有各种片段,每个片段的大小都很大(1+MB)。我们想做的是在GWT下载片段时显示进度条。我们正在使用基于GWTP的代码拆分。

我在GWT源代码中找不到任何与片段加载事件相关的内容。有人知道如何通知页面上的Javascript下一步要下载哪个片段吗?

没有任何直接的方法,但基本上可以通过两种方法解决

1.-扩展CrossSiteIframeLinker并覆盖方法getJsInstallScript(),这样您就可以返回自定义的javascript内容,该内容可以以某种方式提醒用户正在加载的排列,或者只是显示一个微调器。请注意,您的脚本应该包含类似于installScriptEarlyDownload.jsinstallScriptDirect.js 的代码

// Your linker class
public class MyXSILinker extends CrossSiteIframeLinker {
  @Override
  protected String getJsInstallScript(LinkerContext context) {
    return "/your_namespace/your_script.js";
  }
}
// your "/your_namespace/your_script.js" script
function installScript(filename) {
}
// your module file
<define-linker name="mylinker" class="...MyXSILinker" />
<add-linker name="mylinker" />

2.-使用window.__gwtStatsEvent函数。当加载应用程序的脚本要添加到文档中时,您可以在index.html中定义一个函数来启动加载微调器,然后使用gwt代码删除它。

// In your index.html
<head>
<script>
window.__gwtStatsEvent = function(r) {
  if (r.type == 'scriptTagAdded') {
    d = document.createElement('div')
    d.id = 'loading'
    d.innerHTML = 'Loading...'
    document.body.appendChild(d);
  }
}
</head>
</script>
// In your EntryPoint class
Document.get().getElementById("loading").removeFromParent();

要显示准确的进度条非常困难,因为<script>标记不支持进度事件。因此,最好的方法应该是使用ajax加载排列的链接器,这样您就可以在xhr对象中使用html5进度事件。

我会使用#2方法来显示一个用css动画的漂亮的微调器。

最新更新