2011-08-10 28 views
2

Silverlightアプリでは新しいSilverlightコントロールを新しいHTMLページで開きます。ユーザーがセカンダリページの前にブラウザの閉じるボタンを押していない限り、ロードする。両方のブラウザウィンドウが警告なしで消えます。私はonbeforeunloadを処理するためにJavascriptを書きましたが、これは呼び出されませんでした。アイデアは、この行動が悪い可能性があることをユーザーに警告することでした。だから私は、問題をREPROする本当の簡単なサンプルアプリケーションを作成し、ここでは、NI-Litesのとおりです。Silverlightアプリが1つのウィンドウを閉じても親ウィンドウも閉じます

は親ページにボタンを追加します。

HtmlPage.Window.Navigate(new Uri(String.Format("TestControlTestPage.aspx"), 
       UriKind.Relative), "searchresults", 
       "directories=no,location=no,menubar=no,status=yes,toolbar=no,resizable=yes"); 

これは新しいSilverlightをホスティングする新しいHTMLページを開きます制御、newControlここで、私は次のように私たちは、サーバーからいくつかのものをロードする必要があります我々のアプリの状況をシミュレートする:だから遅延がロードされたメソッドが呼び出される前にそこにある

public MainPage() 
     { 
      InitializeComponent(); 

      Loaded += new RoutedEventHandler(MainPage_Loaded); 
      System.Threading.Thread.Sleep(10000); 
     } 

     void MainPage_Loaded(object sender, RoutedEventArgs e) 
     { 

     } 

、と私はXを押した場合( Close)を呼び出すと、両方のウィンドウが消えますr。

私はまた、onbeforeunloadのjavascriptを追加しようとしましたが、これは呼び出されませんでした。プリティ醜い任意のアイデアは

+0

私もこの問題を抱えていますが、誰かが考えられる原因や解決策を思い付いていますか? – ginman

答えて

0

をいただければ幸いですStopping a user from leaving a Silverlight page

のための私の解決策を試してみて、それは本当によく働くようonbeforeunloadの以前の使用は、失敗した理由私はわからないが、おそらくあなたはjavascriptのコードと私達ができる投稿その問題を解決する。

+0

これは私のjavascriptです: –

0
<script type="text/javascript"> 
    alert("askconfirm function set"); //make sure it is loaded 
adjustSilverlightHeight(); 
    window.onbeforeunload = function() { 
     alert("askconfirm"); //confirm it is called 
     var control = document.getElementById("SilverlightControl"); 

     if (control.Content.Page) { 
      var IsLoading = control.Content.Page.IsLoading(); 

      if (!IsLoading) { 
       return; 
      } 

      return 'Closing this window before it loads can cause application instability , Please click Stay on Page option'; 
     } 
    } 
</script> 
+0

あなたのJavascriptを試してみるとJSエラーが出ます: "Content.Pageはnullかオブジェクトではありません"。テストを追加したときContent.Pageは実際にはnullなので、実行時エラーが発生してコードが動作しなくなりました。私のブログのリンクから正確な例を試してみてください。 Cheers –

+0

javascriptでsilverlightコントロールを読み込んでいる場合、ページがまだ完全に読み込まれていない可能性があります。あなたの例を使ってJSからSilverlightメソッドを呼び出しますが、ロードされていない場合はどうすれば有益でしょうか?どちらの方法でも、タイミングが信頼できないため、onbeforeunloadedはこのコンテキストでは役に立ちません。 – ginman

関連する問題