10

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

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

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

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

4

3 回答 3

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;
     }
}
于 2015-04-20T07:23:07.537 回答
0

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

于 2015-12-23T13:48:07.367 回答
0

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

于 2016-10-18T19:51:10.423 回答