关闭一个窗口的Silverlight应用程序也会关闭父窗口

时间:2011-08-10 20:37:18

标签: windows silverlight

在我们的Silverlight应用程序中,我们打开一个新的HTML页面托管的新Silverlight控件,只要用户在加载辅助页面之前没有点击浏览器关闭按钮,事情就会很好。然后两个浏览器窗口都消失,没有任何警告。我尝试编写Javascript来处理onbeforeunload但是甚至没有调用它。这个想法是警告用户这个动作可能不好。所以我然后写了一个真正简单的示例应用来重现问题,这里是ni-lites:

在父页面上添加一个按钮:

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

这将打开一个新的HTML页面,主持一个新的Silverlight控件,newControl,在这里我模拟我们的应用程序中的情况,我们必须从服务器加载一些东西,如下所示:

public MainPage()
        {
            InitializeComponent();

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

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {

        }

因此在调用加载方法之前有延迟,如果在调用加载页面之前按下X(关闭),则两个窗口都会消失。

如上所述,我也试过为onbeforeunload添加javascript但是没有调用。非常难看任何想法将不胜感激

2 个答案:

答案 0 :(得分:0)

尝试我的Stopping a user from leaving a Silverlight page

解决方案

我不确定为什么你以前使用 onbeforeunload 失败了,因为它工作得很好,但也许你发布了这个javascript代码,我们可以解决这个问题。

答案 1 :(得分: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>