2012-04-10 56 views
2

在這個週末之後,我的Wicket應用程序無法正確檢測到javascript。它不適用於我的webhoster,我的本地機器上,我也在另一臺計算機上進行了測試。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。 Wicket版本是1.5.5。

任何人都可以證實此行爲? (可能JIRA值得...)

更新:我找到了這種行爲的原因。 isJavaEnabled檢查是否啓用了Java(不是Javascript)。 Firefox(無聲)在4月2日封鎖了Java插件,因此沒有設置javaEnabled屬性:https://addons.mozilla.org/en-US/firefox/blocked/p80。繁瑣。

+0

自本週末以來,您的應用發生了哪些變化?自從長期以來,Wicket在這個領域本身沒有任何變化。 – 2012-04-10 10:33:28

+0

這是有趣的事情,我什麼都沒變,整個週末都沒有。不是我的web應用程序,不是我的wicket版本,不是我的瀏覽器,主機沒有任何改變(afaik,但我在本地計算機上遇到同樣的問題,我什麼也沒有改變)。可能是一些奇怪的復活節彩蛋玩笑... – rotsch 2012-04-10 11:03:20

+0

也許Firefox/Chrome的更新禁用了對Java的支持(而不是客戶端的JavaScript)。請參閱http://stackoverflow.com/questions/2897333/whats-the-point-of-the-javascript-navigator-javaenabled-function – 2012-04-10 11:37:41

回答

2

可能這從來沒有奏效,事實似​​乎是愚蠢的運氣。

看的Javadoc ClientProperties.isJavaEnabled(),它返回客戶端的navigator.javaEnabled屬性,它反映的Java是否被啓用,而不是的JavaScript

Java!= JavaScript。

+0

我以爲是隻是命名不佳,謝謝。在互聯網上發現的幾個指南使用這種方法進行javascript檢測。我使用NoScript-addon測試了它,它工作正常,但現在您提到它了,NoScript也會阻止Java-Applets,因此將navigator.javaEnabled設置爲false。我堅持使用舊的和簡單的noscript-tags(或者有更好的方法來做到這一點?)。 – rotsch 2012-04-10 12:22:53

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的行爲。