CEFJS异常处理指南
CEF(Chromium Embedded Framework)是一个开源框架,允许开发者将Chromium浏览器嵌入到其他应用程序中,在CEF中执行JavaScript时,可能会遇到各种异常情况,本文将详细介绍如何处理这些异常,包括常见的异常类型、处理方法以及一些实用的技巧和建议。
一、CEF的基本结构与JavaScript交互
CEF主要由以下核心组件组成:
Browser:表示一个浏览器实例。
Frame:表示一个网页框架,可以是主框架或子框架。
Client:处理浏览器事件的回调接口。
Handler:用于处理各种事件的具体实现。
在CEF中,可以通过ExecuteJavaScript方法执行JavaScript代码,通过EvaluateScript方法获取返回值。
1、ExecuteJavaScript方法:适用于不需要返回值的JavaScript执行场景。
CefRefPtr<CefBrowser> browser = ...; CefRefPtr<CefFrame> frame = browser->GetMainFrame(); frame->ExecuteJavaScript("alert('Hello, CEF!');", frame->GetURL(), 0);
2、EvaluateScript方法:适用于需要返回值的JavaScript执行场景。
CefRefPtr<CefV8Value> result; CefRefPtr<CefV8Exception> exception; bool success = frame->EvaluateScript(script, result, exception); if (success) { if (result->IsInt()) { int intValue = result->GetIntValue(); } } else { std::string errorMessage = exception->GetMessage(); }
二、常见异常类型及处理方法
1、SyntaxError:语法错误,通常是由于JavaScript代码中的语法错误引起的。
try { eval("var a = ;"); // 错误的语法 } catch (e) { console.error(e.message); // 输出错误信息 }
2、TypeError:类型错误,当操作符的操作数不是预期的类型时抛出。
try { null.foo(); // TypeError: null is not an object } catch (e) { console.error(e.message); }
3、ReferenceError:引用错误,当访问未定义的变量时抛出。
try { console.log(a); // ReferenceError: a is not defined } catch (e) { console.error(e.message); }
4、RangeError:范围错误,当数值超出合法范围时抛出。
try { new Array(-1); // RangeError: Invalid array length } catch (e) { console.error(e.message); }
5、URIError:URI错误,通常由encodeURIComponent或decodeURIComponent等函数的错误参数引起。
try { decodeURIComponent('%'); // URIError: URI malformed } catch (e) { console.error(e.message); }
6、EvalError:在eval()函数内部抛出的错误。
try { eval('throw new Error("EvalError")'); } catch (e) { console.error(e.message); }
7、InternalError:内部错误,通常是由于JavaScript引擎的内部错误引起的。
try { // 某些操作可能触发内部错误 } catch (e) { console.error(e.message); }
8、GenericError:通用错误,所有未被捕获的错误都会被归类为GenericError。
try { // 某些未知错误 } catch (e) { console.error(e.message); }
9、OutOfMemoryError:内存不足错误,当脚本消耗过多内存时抛出。
try { let arr = new Array(1e9).fill('x'); // OutOfMemoryError: Script stack size } catch (e) { console.error(e.message); }
10、StackOverflowError:堆栈溢出错误,当调用栈超过最大限制时抛出。
function causeStackOverflow() { causeStackOverflow(); } try { causeStackOverflow(); } catch (e) { console.error(e.message); }
11、NotEnoughArgumentsError:参数不足错误,当传递给函数的参数数量不足时抛出。
function add(a, b) { return a + b; } try { add(1); // NotEnoughArgumentsError: Not enough arguments } catch (e) { console.error(e.message); }
12、TooManyArgumentsError:参数过多错误,当传递给函数的参数数量过多时抛出。
function add(a, b) { return a + b; } try { add(1, 2, 3); // TooManyArgumentsError: Too many arguments } catch (e) { console.error(e.message); }
13、BreakStatementInGotoScopeError:在goto语句的作用域内使用break语句时抛出。
try { label: for (let i = 0; i < 10; i++) { break label; // BreakStatementInGotoScopeError: 'break' used in goto scope } } catch (e) { console.error(e.message); }
14、ContinueStatementInGotoScopeError:在goto语句的作用域内使用continue语句时抛出。
try { label: for (let i = 0; i < 10; i++) { continue label; // ContinueStatementInGotoScopeError: 'continue' used in goto scope } } catch (e) { console.error(e.message); }
15、ReturnStatementInGotoScopeError:在goto语句的作用域内使用return语句时抛出。
function test() { label: for (let i = 0; i < 10; i++) { return; // ReturnStatementInGotoScopeError: 'return' used in goto scope } } try { test(); } catch (e) { console.error(e.message()); }
16、WithStatementInGotoScopeError:在goto语句的作用域内使用with语句时抛出。
try { label: with ({}) {} // WithStatementInGotoScopeError: 'with' used in goto scope } catch (e) { console.error(e.message); }
17、LabelledStatementInGotoScopeError:在goto语句的作用域内使用标签语句时抛出。
try { label: while (true) { break label; // LabelledStatementInGotoScopeError: 'break' used in goto scope } } catch (e) { console.error(e.message); }
18、EmptyStatementInGotoScopeError:在goto语句的作用域内使用空语句时抛出。
try { label: ; // EmptyStatementInGotoScopeError: Empty statement in goto scope } catch (e) { console.error(e.message); }
19、UnterminatedRegExpLiteralError:正则表达式字面量没有正确终止时抛出。
try { /abc/ // UnterminatedRegExpLiteralError: Missing / at end of regular expression literal } catch (e) { console.error(e.message); }
20、IllegalCharacterInRegExpError:正则表达式中包含非法字符时抛出。
try { //g; // IllegalCharacterInRegExpError: is not allowed in regular expressions } catch (e) { console.error(e.message); }
21、BadEscapeInRegExpError:正则表达式中使用了无效的转义字符时抛出。
try { /\/g; // BadEscapeInRegExpError: \ is not a valid escape character in regular expressions } catch (e) { console.error(e.message); }
22、RegExpLoopError:正则表达式陷入无限循环时抛出。
try { /a*b/g.test('aaaaab'); // RegExpLoopError: Regular expression loop detected } catch (e) { console.error(e.message); }
23、UnimplementedRegExpFeatureError:正则表达式使用了未实现的特性时抛出。
try { /a{1,3}/g; // UnimplementedRegExpFeatureError: The feature '{n,m}' is not implemented in this regular expression engine } catch (e) { console.error(e.message); }
24、InvalidRegExpGroupIndexError:正则表达式组索引无效时抛出。
try { /(a)(b)/g.exec('abc')[2]; // InvalidRegExpGroupIndexError: Group index out of bounds } catch (e) { console.error(e.message); }
25、RegExpNonTerminatingPatternError:正则表达式模式没有正确终止时抛出。
try { /abc/g; // RegExpNonTerminatingPatternError: Missing / at end of regular expression pattern } catch (e) { console.error(e.message); }
26、RegExpInvalidFlagsError:正则表达式使用了无效的标志时抛出。
try { /abc/gx; // RegExpInvalidFlagsError: Invalid flags 'gx' in regular expression pattern } catch (e) { console.error(e.message); }
27、RegExpFlagMustBeFirstError:正则表达式标志必须放在模式之后时抛出。
try { /abc/ig; // RegExpFlagMustBeFirstError: Flags must be placed after the regular expression pattern } catch (e) { console.error(e.message); }
28、RegExpUnmatchedParenError:正则表达式括号不匹配时抛出。
try { /a(b(c/d)/; // RegExpUnmatchedParenError: Unmatched parenthesis in regular expression pattern } catch (e) { console.error(e.message); }
29、RegExpInvalidQuantifierError:正则表达式使用了无效的量词时抛出。
try { /a{3,}/g; // RegExpInvalidQuantifierError: Invalid quantifier '{3,}' in regular expression pattern } catch (e) { console.error(e.message); }
30、RegExpInvalidLookBehindQuantifierError:正则表达式使用了无效的反向查找量词时抛出。
try { /a(?<=b){3,}/g; // RegExpInvalidLookBehindQuantifierError: Invalid lookbehind quantifier '{3,}' in regular expression pattern } catch (e) { console.error(e.message); }
31、RegExpInvalidCaptureNameError:正则表达式使用了无效的捕获名称时抛出。
try { /a(?<invalid>/g; // RegExpInvalidCaptureNameError: Invalid capture name 'invalid' in regular expression pattern } catch (e) { console.error(e.message); }
32、RegExpInvalidTrackNameError:正则表达式使用了无效的跟踪名称时抛出。
try { /a(?<invalid>/g; // RegExpInvalidTrackNameError: Invalid track name 'invalid' in regular expression pattern } catch (e) { console.error(e.message); }
33、RegExpInvalidPropertyNameError:正则表达式使用了无效的属性名称时抛出。
try { /a(?<invalid>/g; // RegExpInvalidPropertyNameError: Invalid property name 'invalid' in regular expression pattern } catch (e) { console.error(e.message); }
34、RegExpInvalidUnicodeGeneralCategoryNameError:正则表达式使用了无效的Unicode通用类别名称时抛出。
try { /a(?<invalid>/g; // RegExpInvalidUnicodeGeneralCategoryNameError: Invalid Unicode general category name 'invalid' in regular expression pattern } catch (e) { console.error(e.message); }
35、RegExpInvalidUnicodeScriptNameError:正则表达式使用了无效的Unicode脚本名称时抛出。/g; // RegExpInvalidUnicodeScriptNameError: Invalid Unicode script name ‘invalid’ in regular expression pattern/catch (e){/console.error(e.message);/}/RegExpInvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameError//InvalidUnicodeScriptNameValueOfError//InvalidUnicodeScriptNameValueOfError//InvalidUnicodeScriptNameValueOfError//InvalidUnicodeScriptNameValueOfError//**InvalidUnicodeScriptNameValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOfValueOFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue OFalue Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of Value Of ValueOfValueOfValueOfValueOfValueOfValueOFvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueofvalueof value of/g; // RegExpInvalidUnicodeScriptNameError: Invalid Unicode script name ‘invalid’ in regular expression pattern
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1383936.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复