WebView捕获导航到自定义协议

时间:2013-10-14 03:25:39

标签: c# windows-runtime winrt-xaml windows-8.1

我正在使用Windows 8.1 xaml应用程序中的WebView,需要处理导航到自定义协议,即。 “应用:// 12345”。

我让WebView导航到一个网站进行身份验证,然后重定向到此自定义协议作为响应。

没有触发任何WebView导航事件,而Windows正在尝试使用它(“在商店中查找应用程序”对话框)并尝试打开应用程序。

当WebView导航到此协议时是否可以捕获?

3 个答案:

答案 0 :(得分:0)

我有类似的问题,我用注入HTML的代码解决了这个问题。或者,您可以直接在WebView上运行此代码。

for (var i = 0; i < document.links.length; i++) { 
    if(document.links[i].href.indexOf('app') === 0){
        var currentHref = document.links[i].href;
        document.links[i].setAttribute('href', 'javascript:window.external.notify(\'' + currentHref + '\')');   
        document.links[i].removeAttribute('target');
    }       
}

在此之后,您可以在C#代码中捕获window.external.notify并执行您想要的操作。

private void WebView_OnScriptNotify(object sender, NotifyEventArgs e)
{
     if (e.Value.StartsWith("app"))
     {
         DoAction(e.Value);
         return;
     }
}

答案 1 :(得分:0)

也许这是一个矫枉过正的解决方案,但您可以使用NavigateToLocalStreamUri:https://msdn.microsoft.com/library/windows/apps/dn299344方法使用IUriToStreamResolver。 此解决方案允许您创建实现IUriToStreamResolver的自定义解析程序。将针对WebView所需的每个资源通知解析程序。在解析器中,您必须为每个请求的ressource返回一个Stream。但是你可以通过这种方式处理自定义协议。

答案 2 :(得分:0)

我在尝试做类似的事情时发现了这个问题,看起来Windows已经实现了UnsupportedUriSchemeIdentified(基于@ dkarzon的上述评论)所以现在应该可以正常使用了!