在我们的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但是没有调用。非常难看任何想法将不胜感激
答案 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>