WebView 捕获到自定义协议的导航

本文关键字:协议 导航 自定义 WebView | 更新日期: 2023-09-27 18:35:16

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

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

不会触发任何 WebView 导航事件,Windows 正在选取此事件并尝试使用它打开应用("在应用商店中查找应用"对话框)。

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

WebView 捕获到自定义协议的导航

我有类似的问题,我用注入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;
     }
}

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

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