阻止WebView在其他浏览器中打开链接

时间:2016-08-31 08:37:06

标签: c# webview uwp

我有一个webview,我希望如果target=_blank,那么不要在浏览器中打开它,但在webview中保持打开状态。 我尝试了下面的代码:

private async void webView_LoadCompleted(object sender, NavigationEventArgs e)
{
    await webView.InvokeScriptAsync("eval", new[]
    {
        @"(function()
        {
            var hyperlinks = document.getElementsByTagName('a');
            for(var i = 0; i < hyperlinks.length; i++)
            {
                if(hyperlinks[i].getAttribute('target') != null)
                {
                    hyperlinks[i].setAttribute('target', '_self');
                }
            }
        })()"
    });
}

但是有一些网站可以在网页浏览中保持打开状态,并且有一个网站可以在浏览器中打开。如何解决这个问题,以便所有链接在webview上保持打开状态?

1 个答案:

答案 0 :(得分:1)

您的代码无效,因为图片中的“选择”按钮是HTML <button>元素,而不是<a>元素。当用户单击此按钮时,它会调用JavaScript函数以在新窗口中打开。因此,您的代码不适用于此方案。

为了处理新窗口请求,我建议使用WebView.NewWindowRequested event。当用户在WebView中执行导致在新窗口中打开内容的操作时,会发生此事件。我们可以提供新窗口请求的自定义处理,并将Handled属性设置为true,以防止启动默认浏览器。以下是一个简单的示例:

private void webView_NewWindowRequested(WebView sender, WebViewNewWindowRequestedEventArgs args)
{
    webView.Navigate(args.Uri);

    args.Handled = true;
}

有关详细信息,请参阅WebView.NewWindowRequested event中的备注示例