从 C++ 抛出 JavaScript 异常使用 Google V8 的代码
我正在编写一个 JavaScript 应用程序,它通过 Google 的 V8 访问一些 C++ 代码。
一切工作正常,但我不知道如何抛出 JavaScript 异常,该异常可以通过 C++ 方法在 JavaScript 代码中捕获。
例如,如果我有一个 C++ 函数(例如
...
using namespace std;
using namespace v8;
...
static Handle<Value> jsHello(const Arguments& args) {
String::Utf8Value input(args[0]);
if (input == "Hello") {
string result = "world";
return String::New(result.c_str());
} else {
// throw exception
}
}
...
global->Set(String::New("hello"), FunctionTemplate::New(jsHello));
Persistent<Context> context = Context::New(NULL, global);
...
暴露给 JavaScript),我想在 JavaScript 代码中使用它,例如
try {
hello("throw me some exception!");
} catch (e) {
// catched it!
}
从 C++ 代码中抛出 V8 异常的正确方法是什么?
I'm programming a JavaScript application which accesses some C++ code over Google's V8.
Everything works fine, but I couldn't figure out how I can throw a JavaScript exception which can be catched in the JavaScript code from the C++ method.
For example, if I have a function in C++ like
...
using namespace std;
using namespace v8;
...
static Handle<Value> jsHello(const Arguments& args) {
String::Utf8Value input(args[0]);
if (input == "Hello") {
string result = "world";
return String::New(result.c_str());
} else {
// throw exception
}
}
...
global->Set(String::New("hello"), FunctionTemplate::New(jsHello));
Persistent<Context> context = Context::New(NULL, global);
...
exposed to JavaScript, I'ld like to use it in the JavaScript code like
try {
hello("throw me some exception!");
} catch (e) {
// catched it!
}
What is the correct way to throw a V8-exception out of the C++ code?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
编辑:此答案适用于旧版本的 V8。对于当前版本,请参阅 Sutarmin Anton 的回答。
您还可以使用
v8::Exception
中的静态函数引发更具体的异常:Edit: This answer is for older versions of V8. For current versions, see Sutarmin Anton's Answer.
You can also throw a more specific exception with the static functions in
v8::Exception
:在 v8 的最新版本中,Mattew 的答案不起作用。现在,在您使用的每个函数中,您都会获得一个 Isolate 对象。
使用 Isolate 对象引发的新异常如下所示:
In last versions of v8 Mattew's answer doesn't work. Now in every function that you use you get an Isolate object.
New exception raising with Isolate object look like this: