QtWebkit:如何将异常从Qt发送到JavaScript上下文?
我有一个简单的Qt4.7应用程序,它使用QtWebKit显示HTML/JavaScript页面。使用<>代码> AdtoJavaScript(Word/ObjutsObjor)/COD> >在JavaScript环境中提供了几个C++函数。 在某些情况下,当从JavaScript调用此类函数时,是否有方法在JavaScript上下文中引发异常QtWebkit:如何将异常从Qt发送到JavaScript上下文?,qt,webkit,qtwebkit,Qt,Webkit,Qtwebkit,我有一个简单的Qt4.7应用程序,它使用QtWebKit显示HTML/JavaScript页面。使用代码> AdtoJavaScript(Word/ObjutsObjor)/COD> >在JavaScript环境中提供了几个C++函数。 在某些情况下,当从JavaScript调用此类函数时,是否有方法在JavaScript上下文中引发异常 抛出C++异常,如抛掷123;,只会使Qt应用程序崩溃 使用evaluateJavaScript(“throw new Error('whatever');
- 使用
我可以抛出一个异常,但显然它并没有被传递到调用的JavaScript上下文(即,只有evaluateJavaScript(“throw new Error('whatever');”)
代码本身被中止)eval()
setException()
和类似的方法,但显然我需要一个JSContext或其他一些对调用JavaScript上下文的引用,但我不知道如何获取它(虽然WebKit本身或QWebFramePrivate
似乎有这样一个参考,但是QWebFramePrivate
中没有这样的东西
我的最终目标是,像
try {
specialBrowserObject.someFunction();
} catch (e) {
document.write("Exception: "+e.message);
}
显示C++中创建的异常(
“我想知道,从C++中排除一个异常是不可能的,因为JavaScript中有一个异常。我可以提出一些解决办法,但是这些可能是,或者可能不是,是适合你的解决方案。我意识到这两个都不是你希望的完美解决方案。” < P > 1)使用<代码> QyFalth >以便C++代码可以在返回JavaScript时引发异常。如果需要从CC++函数返回一个异常,然后手动抛出一个异常,JavaScript必须检查该值。 2) 按照同样的思路,但在我看来,更简洁的做法是使用
Q_可调用的
函数将QString返回到JavaScript。如果字符串不是空的,则从JavaScript引发异常
该函数将在头文件中定义为-
Q_INVOKABLE QString someFunction( int divisor );
在主cpp文件中,函数应该是沿着这些行的-
QString className::someFunction( int divisor ) {
// Main body of function doing various things
...
...
// Do we need to throw an exception?
if( divisor == 0 )
return "Divide by zero";
...
...
// Function has succeeded so no need to throw an exception
return "";
}
JavaScript看起来像这样-
try {
retVal = specialBrowserObject.someFunction( divisor );
if( retVal != "" )
throw new Error( retVal );
} catch (e) {
document.write("Exception: "+e.message);
}
我希望这会有所帮助。我可以编写一个JavaScript包装来检查函数返回值,因此第二个解决方案是一个选项。但是,函数本身应该返回一个值,因此我需要一种不同的方法来传递异常信息(例如,一个函数应该读取并返回一个文件,请参阅)。至于
QString异常
和qstringgetexception()常量{returnexception;}
。您可以在C++中设置异常字符串,并使用JavaScript PrExcess使用AuthBurServObjut.ExtryString访问它。这个解决方案有效。我编写了一个包装器,它以类似的方式通过异常,并且运行良好。