检测GWT*.nocache.js文件是否正确加载



在Javascript中,验证GWT*.nocache.js文件是否已正确加载的首选方法是什么?

背景我的GWT应用程序在一个简单的shell.html页面中加载一个*.nocache.js文件。

如果用户使用过时的authcookie访问页面,.html文件会从浏览器缓存中完全加载,但*.nocache.js文件无法加载,因为用户需要新的auth令牌。由于.js文件无法加载,因此它将以静默方式失败。用户看到一个空白的.html页面,没有指示他们需要刷新该页面。

(请注意,这里的特殊故障是,由于mime类型错误,.js文件无法加载。身份验证层通过重定向到登录页面来处理过时的身份验证cookie。此页面是一个text/html文档,因此浏览器拒绝将其加载到标记中。对于此问题,假设我无法在应用程序中更改此行为:)

检测这种情况的最佳方法是什么,例如,强制刷新页面。

请注意,硬刷新将强制从服务器获取.html页面,该页面将重定向到登录名。一种方法是告诉浏览器不要缓存.html文件,但我更喜欢另一种可以缓存.html文件的解决方案。

鉴于您无法更改应用程序中的内容,我只回答您的问题。

您需要在page.html中使用一些javascript来检查gwt脚本是否在固定时间后加载:

<head>
<script>
setTimeout(function() {
if (!document.getElementById("my_module_name")) {
window.location.reload();
}  
}, 4000)
</script>
<script language="javascript" src="my_module_name.nocache.js"></script>
</head>

在使用基于iframe的链接器(标准,xsiframe)的情况下,.nocache.js会创建一个iframe来加载适当的排列,并为其提供模块的名称,因此在一段时间后检查该元素的存在就足以知道应用程序是否已加载。

您还可以检查gwt设置为窗口(如window.__gwt_activeModules)的特殊属性的存在

通常,首先加载GWT应用程序,然后进行身份验证。如果需要,可以使用拆分点仅加载登录页面。然后,在确认身份验证后,您将加载应用程序的其他部分。

我从未见过在加载页面之前进行身份验证的情况。也许你可以解释你为什么这样做。

至于你的问题,你需要一个JavaScript来检测是否成功加载了另一个JavaScript,但这个解决方案增加了不必要的复杂性。

最新更新