如何在NPAPI插件中执行Javascript时检测异常?

时间:2011-03-04 09:33:05

标签: npapi

在插件中我使用NPN_Evaluate()来执行一些Javascript。如何检测Javascript引发异常?基本上我想执行任何一段Javascript并从中获取结果或检测它是否引发异常。

我尝试像这样包装我的Javascript代码:

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

这样NPN_Evaluate()的结果将是一个包含属性“message”的NPObject *,如果出现错误则带有异常消息。但我怎么知道这是一个例外?它可能是注入的Javascript代码的结果。

我接近这个错误的方式吗?我可以检测到异常而不在Javascript中捕获它并返回异常作为结果吗?

1 个答案:

答案 0 :(得分:1)

就我个人而言,我从未成为使用NPN_Evaluate的粉丝;如果我需要做一些使用其他方法无法完成的事情(NPN_Invoke,NPN_GetProperty等),我会使用NPN_Evaluate将一个javascript函数注入DOM,然后使用NPN_Invoke调用它;然后,如果它返回false,你知道它失败了。不幸的是,在这个桥上没有任何真正好的异常处理,但是true或false的返回值会告诉你它是否成功 - 我怀疑即使只使用NPN_Evaluate也是如此。

请记住,在javascript中声明为global的任何内容都是窗口的属性;因此,如果您使用NPN_Evaluate注入“function foo(bar){alert(bar);}”,您可以使用NPN_GetValue获取Window NPObject,然后调用GetProperty(“foo”)来获取foo函数。然后,您可以在该bar方法上调用InvokeDefault来调用它,将所需的值传递给bar作为参数。