将 URI 传递给下一页上的 Web 浏览器控件

本文关键字:Web 浏览器 控件 一页 URI | 更新日期: 2023-09-27 18:32:11

嗨,我是Windows Phone开发的新手,我有一个通过WebClient下载RSS源的应用程序,它们通过Syndicationitem设置为列表框,现在我想在另一个页面上的Web浏览器控件中打开这些源(选定的一个),一个独立的页面,仅用于显示在列表框中单击的页面, 我的意思是 URI。问题是 URI 是在我的主页上的此调用中设置的.cs

通过
SyndicationItem sItem = (SyndicationItem)listBox.SelectedItem;
if (sItem.Links.Count > 0)
            {
                Uri uri = sItem.Links.FirstOrDefault().Uri;
                WebBrowserTask webBrowserTask = new WebBrowserTask();
                webBrowserTask.Uri = uri;
                webBrowserTask.Show();
            }

我知道想要设置一个 WebBrowser 控件而不是上面的 WebBrowserTaks 控件,该控件将位于单独的页面上,例如"preview.xaml",我可以像

NavigationService.Navigate(new Uri("/Preview.xaml", UriKind.Relative));

但是如何将带有此导航的 uri 传递到此页面上的 WebBrowser 控件?! 我在另一个页面上没有其他代码,它只是一个具有标题和 WebBrowser 控件的空页面。

将 URI 传递给下一页上的 Web 浏览器控件

在页面之间传递数据是通过在导航调用中使用查询字符串来完成的。例如,您可以修改选择更改处理程序以执行以下操作:

private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var myUri = new Uri("/Preview.xaml?url=" + Uri.EscapeDataString((string)listBox.SelectedItem), UriKind.Relative);
    NavigationService.Navigate(myUri);
}

请注意,在查询字符串中传递的数据应包含转义字符。

我生成了一个仅包含 Web 浏览器控件的预览页面的简单示例:

<phone:PhoneApplicationPage>
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <phone:WebBrowser x:Name="webBrowser" />
    </Grid>
</phone:PhoneApplicationPage>

并附加了一个负载处理程序:

public partial class Preview : PhoneApplicationPage
{
    public Preview()
    {
        InitializeComponent();
        this.Loaded += (sender, e) =>
        {
            if (NavigationContext.QueryString.ContainsKey("url") &&
                Uri.IsWellFormedUriString(NavigationContext.QueryString["url"], UriKind.Absolute))
            {
                webBrowser.Navigate(new Uri(NavigationContext.QueryString["url"], UriKind.Absolute));
            }
            else
            {
                // TODO: Handle url parameter exception
            }
        };
    }
}

正如您在此方法中看到的那样,在尝试导航浏览器控件并根据需要处理任何错误之前,验证您是否具有有意义的 URL 参数可能是值得的。