在新窗口打开页面


2009-12-23 15:31:13|  分类: Silverlight|字号 订阅

 

    SIlverlight3对于导航已经有了比较好的支持,这里不是要讨论怎么进行导航,而是假设已经知道了怎么导航了,那么如何能在新窗口或新选项卡中打开页面呢?本来是比较简单的一件事,那就是在导航的时候设置target="_blank"就好了,不过问题是如果用户禁用了弹出窗口呢?那是不是还能顺利地弹出呢?

    而导航本身有两种情况,一种是点击hyperlinkbutton,而另外一种就是点击随便什么控件或者按下某个键,这两种情况的导航的方法是不一样的,前者当然简单,设置一下参数就好了,比如想要在新窗口打开百度首页可以这样设置:

    <HyperlinkButton Content="www.baidu.com" NavigateUri="http://www.baidu.com" TargetName="_blank"></HyperlinkButton>

    这样是没有问题的,完全可以达到我们的目的。那第二种情况怎么办呢?其实也挺简单的,SL里有一个叫popuowindow的方法,通过这个方法就能达到目的,不过问题是,这个方法并不是总是能够调用成功的,我们首先要判断是否能调用这个方法,如果可以才调用,否则就想其他方法。popupwindow方法只有在由用户引起的事件比如点击事件中才能调用的,像页面的load事件是不能调用的,这就满足了安全性的要求又能达到弹出窗口的效果。我们设置一个按钮,看看怎么使用:

    private void Button_Click(object sender, RoutedEventArgs e)

             {

                 if (HtmlPage.IsPopupWindowAllowed)

                 {

                     HtmlPage.PopupWindow(new Uri("http://www.baidu.com", UriKind.RelativeOrAbsolute), "_blank", null);

                 }

                 else

                 {

                     HtmlPage.Window.Navigate(new Uri("http://www.baidu.com", UriKind.RelativeOrAbsolute), "_blank");

                 }

             }

    注意使用htmlpage需要引用命名空间:

    using System.Windows.Browser;

    首先用HtmlPage.IsPopupWindowAllowed来判断是否能popupwindow,如果可以则调用,否则调用HtmlPage.Window.Navigate方法。popupwindow方法一般都是能够弹出的,至少我没有碰到被block掉的情况,但是navigate方法则不一定了,之所以这样写是为了防止导航的失败,即使被block了只要用户允许就好了,总比引发异常或没有任何效果好。

    还有一点要注意的是,不用debug popupwindow,因为进入debug后HtmlPage.IsPopupWindowAllowed的条件就不满足了。不过断点放到if里面的话当然没有问题了。

你可能感兴趣的:(在新窗口打开页面)