我构建了一个部署在 tomcat 服务器上的 GWT 应用程序。我的应用程序旨在用作强制门户解决方案的登录网关。当设备连接到我们的 wifi 热点时,用户会重定向到我们的 GWT 应用程序,并会提示他们登录/注册,然后才能使用我们的 wifi 连接。
我使用 Android 设备进行了一些测试,一切顺利,GWT 应用程序显示在 Android 伪浏览器中。但是当我们对 iOS 设备(如 iPhone 6 等)进行一些测试时,事情变得很奇怪,GWT 应用程序没有显示在 iOS 伪浏览器中。每当我尝试连接到 wifi 热点并启用自动登录时,伪浏览器都会出现在设置菜单中,并且只显示一个白色的空白页面。
此外,我尝试在我的 GWT 应用程序中放置一些 window.alert,首先在 onModuleLoad 中,其他在某个子模块中,当我再次测试时,没有提示任何警报。所以我假设甚至没有调用 onModuleLoad 。对于这个问题,我有两个问题:
- 这个iOS伪浏览器叫什么?我需要这个伪浏览器名称/术语来搜索有关此浏览器的更多信息。这个伪浏览器是否可以独立启动而无需连接到强制门户?
- 有谁知道我的 GWT 应用程序在 iOS 伪浏览器中运行的解决方案或解决方法?
注意:我在我的 GWT 应用程序中使用 mvp4g 和 gxt。
更新 1
伪浏览器是由系统启动的浏览器,例如,当我们尝试使用 iOS 设备连接到强制门户 wifi 时,在设置菜单中,系统将启动重定向到登录 url 的本机或内部 webview。我发布的屏幕截图是伪浏览器的示例。所以我使用的是真实设备而不是模拟器。我可能知道这个问题的根本原因,但我找不到解决这个问题的方法或解决方案。所以看起来我的 GXT 应用程序无法正常工作,因为在 iOS 伪浏览器中无法识别用户代理。当我尝试从同一设备使用 safari 浏览器访问我的 GXT 应用程序时,我比较了它,用户代理是正确的。我附上了截图:
我试图在我的 gwt.xml 文件中覆盖 gxt.user.agent,如下所示:
<property-provider name="gxt.user.agent">
<![CDATA[{
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('edge/') != -1) return 'edge';
if (ua.indexOf('chrome') != -1) return 'chrome';
if (ua.indexOf('trident') != -1 || ua.indexOf('msie') != -1) {
if ($doc.documentMode >= 11) return 'ie11';
if ($doc.documentMode >= 10) return 'ie10';
if ($doc.documentMode >= 9) return 'ie9';
if ($doc.documentMode >= 8) return 'ie8';
return 'ie10';
}
if (ua.indexOf('safari') != -1) {
if (ua.indexOf('version/3') != -1) return 'safari3';
if (ua.indexOf('version/3') != -1) return 'safari4';
return 'safari5';
}
if (ua.indexOf('gecko') != -1) {
if (ua.indexOf('rv:1.8') != -1) return 'gecko1_8';
return 'gecko1_9';
}
if (ua.indexOf('adobeair') != -1) return 'air';
return 'safari5';
}]]>
</property-provider>
但仍然不适合我,请帮助我。谢谢并恭祝安康。