Приложение Silverlight, закрывающее одно окно, также закрывает родительское окно - PullRequest
2 голосов
/ 11 августа 2011

в нашем приложении Silverlight мы открываем новый элемент управления Silverlight, размещенный на новой HTML-странице, и все работает отлично, пока пользователь не нажимает кнопку закрытия браузера до загрузки дополнительной страницы. Тогда оба окна браузера исчезают без предупреждения. Я пытался написать 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 ​​(Закрыть) до вызова загруженной страницы, то оба окна исчезнут.

как упомянуто выше, я также попытался добавить javascript для onbeforeunload, но это не вызывалось. Довольно уродливые идеи будут оценены

Ответы [ 2 ]

0 голосов
/ 17 августа 2011
<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 голосов
/ 16 августа 2011

Попробуйте мое решение для Запретить пользователю покинуть страницу Silverlight

Я не уверен, почему ваше предыдущее использование onbeforeunload не удалось, так как оно действительно хорошо работает, но, возможно, вы разместите этот код JavaScript, и мы сможем решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...