Как обнаружить исключение при выполнении Javascript в плагине NPAPI? - PullRequest
0 голосов
/ 04 марта 2011

В плагине я использую NPN_Evaluate () для выполнения некоторых Javascript. Как я могу определить, вызывает ли Javascript исключение? По сути, я хочу выполнить любой фрагмент Javascript и получить от него результат или определить, вызвало ли оно исключение.

Я попытался обернуть мой код Javascript следующим образом:

try {
  // Injected Javascript code here
}
catch (exc) {
  exc;
}

Таким образом, результатом NPN_Evaluate () будет NPObject *, содержащий свойство «message» с сообщением об исключении, если что-то пойдет не так. Но как я могу знать, что это исключение? Это также может быть результатом введенного кода Javascript.

Я неправильно подхожу к этому? Могу ли я обнаружить исключение, не перехватывая его в Javascript и не возвращая исключение как результат?

1 Ответ

1 голос
/ 04 марта 2011

Лично я никогда не был фанатом использования NPN_Evaluate;Если бы мне нужно было сделать что-то, чего нельзя было бы сделать с помощью других методов (NPN_Invoke, NPN_GetProperty и т. Д.), Я бы использовал NPN_Evaluate, чтобы внедрить функцию JavaScript в DOM, а затем вызвать ее с помощью NPN_Invoke;затем, если он возвращает false, вы знаете, что это не удалосьК сожалению, по этому мосту нет действительно хорошей обработки исключений, но возвращаемое значение true или false сообщит вам, если это удалось - я подозреваю, что это верно даже для простого использования NPN_Evaluate.

Помните, чтовсе, что объявлено глобальным в javascript, является свойством окна;таким образом, если вы вводите "function foo (bar) {alert (bar);}" с помощью NPN_Evaluate, вы можете использовать NPN_GetValue, чтобы получить Window NPObject, а затем вызвать GetProperty ("foo"), чтобы получить функцию foo.Затем вы можете вызвать InvokeDefault для этого метода bar, чтобы вызвать его, передав в качестве параметра любое значение, которое вы хотите для bar.

...