在Javascript中,验证GWT * .nocache.js文件是否已正确加载的首选方法是什么?
背景 我的GWT应用程序在一个简单的shell .html页面中加载* .nocache.js文件。
如果用户使用过时的身份验证cookie访问该页面,则.html文件会从浏览器缓存中完全加载,但* .nocache.js文件无法加载,因为用户需要新的身份验证令牌。 由于.js文件无法加载,因此无提示失败。用户看到一个空白的.html页面,没有任何迹象表明他们需要刷新页面。
(注意这里特别的失败是因为错误的mime类型而没有加载.js文件.auth层通过重定向到登录页面来处理陈旧的auth cookie。这个页面是一个text / html文档,所以浏览器拒绝将其加载到标记中。假设这个问题我无法在应用程序中更改此行为:)
检测此情况的最佳方法是什么,例如强制刷新页面。
请注意,硬刷新将强制从服务器获取.html页面,该页面将重定向到登录名。 一种方法是告诉浏览器不要缓存.html文件,但我更喜欢另一种允许缓存.html文件的解决方案。
答案 0 :(得分:1)
鉴于您无法更改应用程序中的内容,我将仅回答您的问题。
您需要在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
答案 1 :(得分:0)
通常,首先加载GWT应用,然后进行身份验证。如果需要,可以使用分割点仅加载登录页面。然后,在确认身份验证后,您将加载应用程序的其他部分。
我从未见过在页面加载之前完成身份验证的场景。也许你可以解释为什么你这样做。
至于你的问题,你需要一个JavaScript来检测是否成功加载了另一个JavaScript,但是这个解决方案增加了不必要的复杂程度。