Windows手机webbrowser检测号码或电子邮件?

时间:2014-02-27 07:45:20

标签: html xaml windows-phone

我正在使用webbrowser在我的Windows手机应用程序中加载本地html文件,但是我在html中有一个数字和电子邮件地址,如何在这些链接的点击事件上设置电子邮件和电话呼叫任务?

1 个答案:

答案 0 :(得分:3)

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

您可以做的是在HTML中注入Javascript,它将枚举所有a代码并汇总onclick个事件。该事件将调用window.external.Notify,而ScriptNotify将提升WebBrowser的{​​{1}}事件,并将URL作为参数。

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

以下是代码:

    // 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'>Envoyer un email</a><a href='tel:+3301010101'>Appeler</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();
            }
            else if (href.StartsWith("tel:"))
            {
                PhoneCallTask call = new PhoneCallTask();
                call.PhoneNumber = href.Replace("tel:", string.Empty);
                call.Show();
            }
        }
    }