在插件中我使用NPN_Evaluate()来执行一些Javascript。如何检测Javascript引发异常?基本上我想执行任何一段Javascript并从中获取结果或检测它是否引发异常。
我尝试像这样包装我的Javascript代码:
try {
// Injected Javascript code here
}
catch (exc) {
exc;
}
这样NPN_Evaluate()的结果将是一个包含属性“message”的NPObject *,如果出现错误则带有异常消息。但我怎么知道这是一个例外?它可能是注入的Javascript代码的结果。
我接近这个错误的方式吗?我可以检测到异常而不在Javascript中捕获它并返回异常作为结果吗?
答案 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作为参数。