Javascript检测不再工作

Javascript detection not working anymore

本文关键字:工作 不再 检测 Javascript      更新时间:2023-09-26

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

我的检测脚本:

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

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

getRequestCycleSettings().setGatherExtendedBrowserInfo(true);

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

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

任何人都可以确认此行为吗?(可能值得JIRA

...

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

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

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

Java != JavaScript。

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

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,从而确定 Wicket 在 Javascript 不存在时的行为。