locked
xap ファイルの読み込みエラー時の処理について RRS feed

  • 質問

  • 初めて質問いたします。

    Object タグの source パラメータに指定した xap ファイルが読み込めなかった場合 (404 status など) に

    エラー処理を行いたいと考えています。

    onerror のパラメータを利用しても、指定したスクリプトに処理を渡すことができません。

    何らかの方法でファイルが読み込めなかった場合の処理を行うことはできるのでしょうか?

    2008年11月13日 12:50

回答

  • たとえば、次のようなHTMLでxapが見つからない状況を作ってみると、エラー処理に制御が渡され、throw new Error(errMsg)の行が実行されます。お試しいただけませんか。

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <!-- saved from url=(0014)about:internet -->
    <head>
       

        <style type="text/css">
        html, body {
         height: 100%;
         overflow: auto;
        }
        body {
         padding: 0;
         margin: 0;
        }
        #silverlightControlHost {
         height: 100%;
        }
        </style>
       
        <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 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";
                }

                throw new Error(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='errorLocation' style="font-size: small;color: Gray;"></div>

        <div id="silverlightControlHost">
      <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
       <param name="source" value="MediaPlayerTemplate.xap1"/>
       <param name="onerror" value="onSilverlightError" />
      
       <a href="http://go2.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
            <img src="http://go2.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>
    </body>
    </html>

     


     この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。

     

    2008年11月27日 4:32

すべての返信

  • たとえば、次のようなHTMLでxapが見つからない状況を作ってみると、エラー処理に制御が渡され、throw new Error(errMsg)の行が実行されます。お試しいただけませんか。

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <!-- saved from url=(0014)about:internet -->
    <head>
       

        <style type="text/css">
        html, body {
         height: 100%;
         overflow: auto;
        }
        body {
         padding: 0;
         margin: 0;
        }
        #silverlightControlHost {
         height: 100%;
        }
        </style>
       
        <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 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";
                }

                throw new Error(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='errorLocation' style="font-size: small;color: Gray;"></div>

        <div id="silverlightControlHost">
      <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
       <param name="source" value="MediaPlayerTemplate.xap1"/>
       <param name="onerror" value="onSilverlightError" />
      
       <a href="http://go2.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
            <img src="http://go2.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>
    </body>
    </html>

     


     この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。

     

    2008年11月27日 4:32
  • ありがとうございます。

    正常に動作いたしました。

     

    ただ、自分のコードにそのまま実装しますと、何故か onerror のイベントが発生せず

    内包している script を解除しコードをシンプルにしていくと動作するようになりますので、

    silverlight を起動する html 内になんらかの問題を抱えているようです。

     

    ちょっとこちらの切り分けをおこなってみます。

    ありがとうございました。

     

    2008年12月6日 20:36