0

我有一个 WebBrowser 控件:

<phone:WebBrowser Name="ArticleContent" Navigating="ArticleContent_Navigating" Navigated="ArticleContent_Navigated" />

我从服务器获取文章,如 HTML 字符串:

string Article = "<p>Sometext</p><a href=\"mailto:artjomgsd@inbox.lv\"><span style=\"font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Arial Unicode MS&quot;; mso-fareast-language:LV\">artjomgsd@inbox.lv</span></a>";

我这样做:

ArticleContent.NavigateToString(Article);

并具有停止加载图标的功能:

private void ArticleContent_Navigated(object sender, NavigationEventArgs e)
{
    HideLoading();
}

这个函数来处理链接(在外部浏览器中打开链接):

private void ArticleContent_Navigating(object sender, NavigatingEventArgs e)
{
    e.Cancel = true;
    WebBrowserTask webBrowserTask = new WebBrowserTask();
    webBrowserTask.Uri = new Uri(e.Uri.ToString(), UriKind.Absolute);
    webBrowserTask.Show();
}

我的问题是,为什么当我点击电子邮件超链接时没有任何反应?它甚至没有进入 ArticleContent_Navigating() 函数?

PS我想在点击邮件超链接时打开MailTask​​。

4

2 回答 2

0

不幸的是,Windows Phone 上mailto:的控件不支持它。WebBrowser

您可以做的是在 HTML 中注入 Javascript,它将枚举所有a标签并连接一个onclick事件。该事件将调用,而该事件window.external.Notify又将引发 的ScriptNotify事件,WebBrowser并将 URL 作为参数。

这有点复杂,但我认为这是在 Windows Phone 上处理 mailto 协议的唯一选择。

这是一些示例代码:

// Page Constructor
public MainPage()
{
    InitializeComponent();

    browser.IsScriptEnabled = true;
    browser.ScriptNotify += browser_ScriptNotify;
    browser.Loaded += browser_Loaded;
}

void browser_Loaded(object sender, RoutedEventArgs e)
{
    // Sample HTML code
    string html = @"<html><head></head><body><a href='mailto:test@test.com'>Send an email</a></body></html>";

    // Script that will call raise the ScriptNotify via window.external.Notify
    string notifyJS = @"<script type='text/javascript' language='javascript'>
                            window.onload = function() {
                                var links = document.getElementsByTagName('a');
                                for(var i=0;i<links.length;i++) {
                                    links[i].onclick = function() {
                                        window.external.Notify(this.href);
                                    }
                                }
                            }
                        </script>";

    // Inject the Javascript into the head section of the HTML document
    html = html.Replace("<head>", string.Format("<head>{0}{1}", Environment.NewLine, notifyJS));

    browser.NavigateToString(html);
}

void browser_ScriptNotify(object sender, NotifyEventArgs e)
{
    if (!string.IsNullOrEmpty(e.Value))
    {
        string href = e.Value.ToLower();
        if (href.StartsWith("mailto:"))
        {
            EmailComposeTask email =  new EmailComposeTask();
            email.To = href.Replace("mailto:", string.Empty);
            email.Show();
        }
    }
}
于 2013-09-06T07:22:40.413 回答
0

您的 Html 标签有问题只需 在您的链接上的 mailto:artjomgsd@inbox.lv\ 之前写Http//即可正常工作

像下面这样

"<p>Sometext</p><a href=\"http://mailto:artjomgsd@inbox.lv\"><span style=\"font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Arial Unicode MS&quot;; mso-fareast-language:LV\">artjomgsd@inbox.lv</span></a>";

我在我的应用程序中测试了这个代码现在它的工作..

于 2013-09-06T08:21:02.940 回答