我很难将适当的异常处理添加到大量使用Silverlight - JavaScript互操作性的现有代码中。在这种情况下,我的JavaScript可以抛出一个我想在Silverlight中有意义处理的异常。处理来自Silverlight的JavaScript异常
从Silverlight中,我创建一个JavaScript对象的实例,再后来我打电话说对象的方法:
public class MyWrapper
{
dynamic _myJSObject;
public MyWrapper()
{
_myJSObject = HtmlPage.Window.CreateInstance("MyJSObject");
}
public int MyMethod()
{
try
{
int result = (int)_myJSObject.MyMethod();
}
catch (Exception ex)
{
// I want to add meaningful exception handling here
}
}
}
每当MyJSObject.MyMethod
抛出一个异常,有两个问题:
- 浏览器显示发生异常的消息。
- 关于异常的信息不会传递给我的托管代码。相反,我得到一个
RuntimeBinderException
,它只是说“不能调用非委托类型”,并且不包含任何其他信息。这似乎与here描述的不匹配;我期待InvalidOperationException
。
我试图避免铸方法的返回值:
object tmp= _myJSObject.MyMethod();
这没什么区别。更改JavaScript端引发的异常类型也没有效果。
MyJSObject.prototype.MyMethod = function()
{
throw "Hello Silverlight!";
}
我能想到的,现在唯一的办法就是滥用函数的返回值传递关于异常的信息,但是,这将使我的代码一大堆丑陋......这样:
为什么我看到的行为与文档中描述的行为不同?不知怎的,这与我使用dynamic
有关吗?我如何正确处理托管代码中JavaScript中发生的异常?