2

这个周末之后,我的 Wicket 应用程序无法再正确检测到 javascript。它不适用于我的虚拟主机,在我的本地计算机上,我也在另一台计算机上对其进行了测试。

我的检测脚本:

WebClientInfo clientInfo = (WebClientInfo)WebSession.get().getClientInfo();
    if(!clientInfo.getProperties().isJavaEnabled()){
        System.out.println("not enabled!");
        WebSession.get().setClientInfo(null);
    }

加上应用程序类中的这个:

getRequestCycleSettings().setGatherExtendedBrowserInfo(true);

我还从头开始创建了一个 wicket 应用程序,结果相同,没有 javascript 检测。

在写这篇文章时,我在 Internet Explorer 中检查了它。适用于 IE 8 + 9。不适用于 FF 11.0。检票口版本是 1.5.5。

任何人都可以确认这种行为吗?(可能 JIRA 值得......)

更新:我找到了这种行为的原因。isJavaEnabled检查是否启用了 Java(不是 Javascript)。Firefox(默默地)在 4 月 2 日阻止了 Java 插件,因此没有设置 javaEnabled 属性:https ://addons.mozilla.org/en-US/firefox/blocked/p80 。麻烦。

4

2 回答 2

3

可能这从来没有奏效,而且它似乎是愚蠢的运气。

查看ClientProperties.isJavaEnabled()的 javadocs ,它返回客户端的navigator.javaEnabled属性,该属性反映是否启用了Java,而不是JavaScript

Java!= JavaScript。

于 2012-04-10T11:48:44.047 回答
1

另一种方法是使用“用户代理”字符串:

public boolean javascriptSupported() {
    WebRequest webRequest = (WebRequest) getRequest();
    String userAgent = webRequest.getHeader("User-Agent");
    if (userAgent == null || userAgent.startsWith("Googlebot")) {
        return false;
    }
    return true;
}

AjaxLazyLoadPanel尽管您需要扩展上面的用户代理列表,但我已将其用于搜索引擎。

还有WebRequest.isAjax(),它也可能有用,因为它用于确定RedirectPolicy使用的,因此,当 Javascript 不存在时 Wicket 的行为。

于 2014-08-07T04:32:06.633 回答