2011-12-31 73 views
3

我使用的HtmlUnit 2.9和Java腳本解析我在以下情況例外的HtmlUnit ScriptException 「控制檯」 沒有定義

function debug(o){ 
    if (console && console.log){ 
    console.log(o) 
    } 
}; 

堆棧跟蹤

EcmaError: 
    lineNumber=[168] 
    column=[0] 
    lineSource=[null] 
    name=[ReferenceError] 
    sourceName=[script in http://localhost:808/mypage/ll.html from (154, 36) to (301, 14)] 
    message=[ReferenceError: "console" is not defined. (script in http://localhost:8080.com/mypage/ll.html from (154, 36) to (301, 14)#168)] 
com.gargoylesoftware.htmlunit.ScriptException: ReferenceError: "console" is not defined. (script in http://localhost:8080.com/mypage/ll.html from (154, 36) to (301, 14)#168) 
     at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:595) 
     at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537) 
     at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538) 
     at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:545) 
     at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:520) 
     at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:896) 
     at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:195) 
     at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:214) 

如果獲取腳本異常是由於console我嘗試在Firefox上指定的頁面,它工作正常,我已經嘗試3.6以及9.0.1。

我也試過設置setThrowExceptionOnScriptError(false)爲了避免異常,但引擎停止或在得到錯誤後不解析javascript。

有沒有什麼辦法可以讓javascript引擎在javascript中理解console

+0

如果使用BrowserVersion是否也停止.FIREFOX_3_6? – milan 2011-12-31 22:00:38

+0

可能有用(見下面的答案以及):http://stackoverflow.com/questions/1215392/how-to-quickly-and-conveniently-disable-all-console-log-statements-in-my-code – 2011-12-31 22:37:41

+1

沒有你有沒有找到解決這個問題的方法? – Cuga 2012-01-17 21:23:19

回答

2

if條件不正確的結構:

if (console && console.log){ 

也就是說如果不設置第一,如果將拋出一個錯誤;在未定義的環境中訪問console就像訪問任何未定義的變量;它會拋出一個ReferenceError

嘗試:

if(typeof console != "undefined" && console.log) { 

或者:

if(window.console && console.log) { 

它不會在錯誤扔在Firefox火狐以來實現了Firebug的API一樣,Chrome和Safari。但是,默認情況下,Internet Explorer不會,因此,在這裏值得做一個正確的功能檢查,因爲它會在不實現此API的瀏覽器中引發ReferenceError。

+0

謝謝,我知道這種失敗,這就是爲什麼該頁面不能在IE瀏覽器以及其他瀏覽器上運行,除了Firefox。有沒有什麼辦法可以改變只有部分代碼的htmlunit? – Rehman 2012-01-01 00:09:29

+0

這裏的解決方法是修復你的功能測試(這是一個實際的錯誤,而不僅僅是整個測試平臺);不確定你可以重寫測試平臺來識別控制檯對象 – Yahel 2012-01-01 00:33:05

+1

Erm,'「whole」.replace(「w」,「」)''。 – Yahel 2012-01-01 00:47:32

0

您的代碼不會使用java腳本控制檯對象,它不支持,直到當前的版本,它承諾將在下一版本中得到支持,因爲它是說here