2009-09-02 33 views
1

我在Firefox上调试Silverlight 2。我的萤火得到一个未处理的错误:未与JS处理Silverlight异常

Unhandled Error in Silverlight 2 Application 
Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED)) 
at MS.Internal.XcpImports.CheckHResult(UInt32 hr) 
at MS.Internal.XcpImports.GetValue(INativeCoreTypeWrapper obj, DependencyProperty property) 
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet, Boolean isSetByStyle, Boolean isSetByBuiltInStyle, PropertyInvalidationReason reason) 
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value) 
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value) 
at System.Windows.Data.BindingOperations.SetBinding(DependencyObject target, DependencyProperty dp, BindingBase binding) 
at System.Windows.FrameworkElement.SetBinding(DependencyProperty dp, Binding binding) 
at FileAudit.Page..ctor() 
at FileAudit.App.Application_Startup(Object sender, StartupEventArgs e) 
at System.Windows.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args) 
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName) 

点的Silverlight.js线26是

control = new ActiveXObject('AgControl.AgControl'); 

我的HTML是

<head> 
<script src="Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 

<script type="text/javascript" src="/Silverlight.js"></script> 

<script type="text/javascript"> 
    function onSilverlightError(sender, args) { 

     var appSource = ""; 
     if (sender != null && sender != 0) { 
      appSource = sender.getHost().Source; 
     } 
     var errorType = args.ErrorType; 
     var iErrorCode = args.ErrorCode; 

     var errMsg = "Unhandled j Error in Silverlight 2 Application " + appSource + "\n"; 

     errMsg += "Code: " + iErrorCode + " \n"; 
     errMsg += "Category: " + errorType + "  \n"; 
     errMsg += "Message: " + args.ErrorMessage + "  \n"; 

     if (errorType == "ParserError") { 
      errMsg += "File: " + args.xamlFile + "  \n"; 
      errMsg += "Line: " + args.lineNumber + "  \n"; 
      errMsg += "Position: " + args.charPosition + "  \n"; 
     } 
     else if (errorType == "RuntimeError") { 
      if (args.lineNumber != 0) { 
       errMsg += "Line: " + args.lineNumber + "  \n"; 
       errMsg += "Position: " + args.charPosition + "  \n"; 
      } 
      errMsg += "MethodName: " + args.methodName + "  \n"; 
     } 

     $("#errorLocation").html(errMsg); 
    } 
</script> 
</head> 
<body> 
    <!-- Runtime errors from Silverlight will be displayed here. 
    This will contain debugging information and should be removed or hidden when debugging is completed --> 
    <div id="silverlightControlHost2"> 
     <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" 
      width="431" height="30" id="Xaml2"> 
      <param name="source" value="/ClientBin/FileAudit.xap" /> 
      <param name="onerror" value="onSilverlightError" /> 
      <param name="background" value="white" /> 
      <param name="minRuntimeVersion" value="2.0.31005.0" /> 
      <param name="autoUpgrade" value="true" /> 
      <param name="initParams" value="id=slPlugin1,embeddingTechnique=objectElement" /> 
      <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"> 
       <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" 
        style="border-style: none" /> 
      </a> 
     </object> 
     <iframe style='visibility: hidden; height: 0; width: 0; border: 0px'></iframe> 
    </div> 
    <div id='errorLocation' style="font-size: small; color: Gray;"> 
    </div> 

</body> 

为什么没有得到在JS中处理并显示在errorLocation中?
也抱歉我的格式糟透了。

+0

它在IE和/或从Visual Studio或Blend运行时工作吗? – AnthonyWJones 2009-09-02 20:58:22

回答

2

想出了一个解决方案
走到App.xaml.cs文件,并修改了Unhandled_Exception功能

有了这一点,有点呼叫的这个JS很容易

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
    { 
     // If the app is running outside of the debugger then report the exception using 
     // the browser's exception mechanism. On IE this will display it a yellow alert 
     // icon in the status bar and Firefox will display a script error. 


     // NOTE: This will allow the application to continue running after an exception has been thrown 
     // but not handled. 
     // For production applications this error handling should be replaced with something that will 
     // report the error to the website and stop the application. 
     e.Handled = true; 

     try 
     { 
      ThrowRightError(e.ExceptionObject); 
      //System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight a 2 Application " + errorMsg + "\");"); 
     } 
     catch 
     { 
     } 

    } 
    private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e) 
    { 
     try 
     { 
      ThrowRightError(e.ExceptionObject); 
      //System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight 2 Application " + errorMsg + "\");"); 
     } 
     catch (Exception) 
     { 
     } 
    } 

    private void ThrowRightError(Exception e) 
    { 
     string errorMsg = ""; 
     var exLayer = -1; 
     //errorMsg += String.Format("<br>Layer {0}<hr>", exLayer); 
     Exception ex2 = e; 
     while (ex2 != null) 
     { 
      errorMsg += "Message : <br />" + ex2.Message + "<br />Data :<br />" + ex2.Data + "<br />StackTrace :<br />" + ex2.StackTrace; 
      exLayer++; 
      errorMsg += String.Format("<br>Layer {0}<hr>", exLayer); 
      ex2 = ex2.InnerException; 
     } 
     errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"<br />"); 

     HtmlPage.Window.CreateInstance("foo2", new[] { errorMsg }); 
    } 

然后在什么原始的错误是

JS

function foo2(theAlert) { 
    $("#errorLocation").html(theAlert); 
} 

我也想通了

ClientIdTextBlock.SetBinding(TextBox.TextProperty, ClientIdBinding); 

一个TextBox约束力的文本 ...愚蠢的错误。