Носорог: получение строки № и столбца №

Я использую свои собственные прокси-объекты, которые расширяют org.mozilla.javascript.ScriptableObject. У меня также есть свои собственные функции, которые расширяют org.mozilla.javascript.Function.

Я хочу, чтобы любые исключения, выдаваемые здесь, возвращали строку no и, если возможно, номер столбца, в котором они встречались в оцененном скрипте. Это возможно? У меня есть только доступ к контексту и сфере.

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).

Надеюсь это поможет.

Другие вопросы по тегам