2013-04-17 78 views
1

我正在運行自己的代理對象,它們擴展了org.mozilla.javascript.ScriptableObject。 我也有我自己的擴展org.mozilla.javascript.Function的函數。犀牛:檢索行號和列號

我的願望是在這裏拋出任何異常返回行號和如果可能的話,他們發生在評估腳本中的列號。這可能嗎?我只能訪問上下文和範圍。

回答

1

只要腳本拋出異常,Rhino就會拋出RhinoException,它已經有行號和列號(以及更多)。但是,當您執行腳本時,您需要提供Rhino將使用的行號作爲起始行號。發生異常/錯誤的實際行號將與此號碼相關。因此,一些線這樣的:

//-- Define a simple test script to test if things are working or not. 
String testScript = "function simpleJavascriptFunction() {" + 
        " this line has syntax error." + 
        "}" + 
        "simpleJavascriptFunction();"; 
//-- Compile the test script. 
Script compiledScript = Context.getCurrentContext().compileString(testScript, "My Test Script", 2, null); 
//-- Execute the test script. 
compiledScript.exec(Context.getCurrentContext(), anyJavascriptScope); 

在上面的代碼中,起始行號被設置爲2(該呼叫的來compileString第三個參數())。當這個被執行時,Rhino會拋出一個RhinoException,將lineNumber屬性設置爲值'3'(第一行被視爲我們傳遞的第二行b/c 2)。

希望這會有所幫助。

+0

事實上,我認爲我所追求的是不可能的。我實際上沒有調用腳本,而是犀牛在我的對象上調用一個函數 –