C# 如何在用户单击webbrowser中的链接时进行拦截

C# 如何在用户单击webbrowser中的链接时进行拦截,c#,silverlight,windows-phone-7,C#,Silverlight,Windows Phone 7,我正试图拦截网络浏览器控件中的链接。 我的HTML页面包含自定义链接,对于一些以shared://开头的链接,当用户点击它时,我想截取 在iPhone上,我会使用webView:shouldStartLoadWithRequest:navigationType:方法,并查看所选的URL 我还没有在Silverlight for Windows Phone上重现类似的行为 我会这样做: { webBrowser1.Navigating += new EventHandler

我正试图拦截网络浏览器控件中的链接。 我的HTML页面包含自定义链接,对于一些以shared://开头的链接,当用户点击它时,我想截取

在iPhone上,我会使用webView:shouldStartLoadWithRequest:navigationType:方法,并查看所选的URL

我还没有在Silverlight for Windows Phone上重现类似的行为

我会这样做:

    {
        webBrowser1.Navigating += new EventHandler<NavigatingEventArgs>(webBrowser1_Navigating);
    }

    void webBrowser1_Navigating(object sender, NavigatingEventArgs e)
    {
        string scheme = null;

        try
        {
            scheme = e.Uri.Scheme; // <- this is throwing an exception here
        }
        catch
        {
        }
        if (scheme == null || scheme == "file")
            return;
        // Not going to follow any other link
        e.Cancel = true;
        if (scheme == "shared")
        {

        }
{
webBrowser1.Navigating+=新事件处理程序(webBrowser1_Navigating);
}
void webBrowser1_导航(对象发送方,导航事件参数e)
{
字符串scheme=null;
尝试
{

scheme=e.Uri.scheme;//这是我的最终代码,以防这对将来的人有用:

对于about屏幕,我使用WebBrowser组件中显示的html文件。 about页面有一个“告诉你的朋友这个应用”链接以及到外部网站的链接。 它也有局部子页面

本地子页使用文件://链接链接到。这些子页可以在WebBrowser组件中导航。 外部链接是使用Internet Explorer从外部打开的。 告诉你的朋友链接是由一个链接组成的,它可以打开一封带有预设主题和正文的电子邮件。不幸的是,除了标准的方案外,没有其他方案可用,因为它们不会触发导航事件

还有一个支持链接,它是mailto://链接,并打开一个EmailComposeTask

    void webBrowser1_Navigating(object sender, NavigatingEventArgs e)
    {
        String scheme = null;

        try
        {
            scheme = e.Uri.Scheme;
        }
        catch
        {
        }
        if (scheme == null || scheme == "file")
            return;
        // Not going to follow any other link
        e.Cancel = true;
        if (scheme == "http")
        {
            // Check if it's the "shared" URL
            if (e.Uri.Host == "shared")
            {
                // Start email
                EmailComposeTask emailComposeTask = new EmailComposeTask();
                emailComposeTask.Subject = "Sharing an app with you";
                emailComposeTask.Body = "You may like this app...";
                emailComposeTask.Show();
            }
            else
            {
                // start it in Internet Explorer
                WebBrowserTask webBrowserTask = new WebBrowserTask();
                webBrowserTask.Uri = new Uri(e.Uri.AbsoluteUri);
                webBrowserTask.Show();
            }
        }
        if (scheme == "mailto")
        {
            EmailComposeTask emailComposeTask = new EmailComposeTask();
            emailComposeTask.To = e.Uri.AbsoluteUri;
            emailComposeTask.Show();
        }
    }

实际上,除了外部链接(url以http://)或电子邮件(url以mailto://)之外,所有内容都会引发异常。您是否尝试过使用e.Uri.ToString()然后解析它以检索方案?如何检测何时单击了
共享://
?我没有检测到单击了什么共享:。这就是问题所在…导航事件仅在单击文件://、http://或mailto://链接时生成。如果单击文件://,则大多数Uri属性都不可用(包括scheme)。因此,我最后做的是将shared://链接替换为…我查看了URL…这是出于我的目的,您也可以使用“about:”scheme。它方便地提供了绝对URI中冒号之后的所有内容。