我最近将我的应用程序从GWT2.5升级到了GWT2.7。这导致我放弃了对IE6和IE7的支持。
我想为IE6或IE7的用户提供一个警告,他们的浏览器已经过时,无法工作。目前,如果你使用其中一个浏览器访问该应用程序,你会看到一个空白屏幕。
我知道有几种方法可以一起破解一些东西,但我宁愿使用GWT的方式,而不是一些破解。是否有适用于不受支持的浏览器的GWT挂钩?
选项(破解)一个
将此放入我的main.html:
if(document.documentMode === 6 || document.documentMode === 7){
myUnsupportedBrowserWarningFunction();
}
潜在的问题是,如果有人使用的浏览器GWT不识别,而我也不识别(移动歌剧?其他浏览器),他们仍然会得到一个空白页面。
选项(破解)两个
GWT在此处查找已编译的JS:
gwt/myApp/ASDFKLSDJFLSFDJSLDFJLSJDFSDES.cache.js
当有人使用不受支持的浏览器时,会请求(但找不到)以下内容:
gwt/myApp/undefined.cache.js
可以创建undefined.cache.js
并将不支持的浏览器代码放在那里。这显然是一个脆弱的解决方案,将在未来的GWT更新中崩溃。
选项三
最近的一个补丁(GWT2.7中提供)允许您提供一个默认的如果GWT无法检测到浏览器,则使用延迟绑定您可以显示所提供的应用程序可能没有的警告正常工作,因为GWT通常不支持浏览器。
--J.
源
我不想为不受支持的浏览器设置默认排列。我希望网站不工作,并显示警告。所以这个解决方案并不能真正提供我想要的东西。
类似问题&帖子
- 2009年,GWT的早期版本也被问到了同样的问题。我希望GWT在过去6年中添加了某种挂钩或最佳实践
- 有关设置默认(回退)排列的更多信息
您应该能够为此使用onLoadErrorFn
:https://code.google.com/p/google-web-toolkit/issues/detail?id=8135
<script>
function gwtLoadError(errMsg) {
// GWT app couldn't load, reason in errorMsg
}
</script>
<meta name="gwt:onLoadErrorFn" content="gwtLoadError">
或者可能是onPropertyErrorFn
:
<script>
function gwtPropError(propName, allowedValues, actualValue) {
if (propName == 'user.agent') {
// unsupported browser
}
}
</script>
<meta name="gwt:onPropertyErrorFn" content="gwtPropError">
(我认为user.agent.runtimeWarning在这种情况下不会有帮助,但也许可以看看)
有一个简单的方法:
条件注释
<!--[if lt IE 8]>
<p>You are using an unsupportet browser. Please perform an update</p>
<![endif]-->
我认为选项3可能是最好的,但有一个问题:这将启动实际的应用程序(可能仍然不兼容)。
如果这是一个问题,并且您想要一个明确的警告,您可以重写排列选择脚本(您需要用即将发布的GWT更新该脚本)
您需要复制此来源:
https://gwt.googlesource.com/gwt/+/2.7.0/user/src/com/oogle/gwt/useragent/rebind/UserAgentProperties Generator.java
你可以添加这样的内容:
$wnd.Location.replace('nosupported.html');
在第90行和第91行之间