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

本文关键字:链接 浏览器 WebView 其他 防止 | 更新日期: 2023-09-27 18:04:47

我有一个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中保持打开状态,有一个网站可以在浏览器中打开。我如何解决这个问题,使所有链接保持开放的webview?

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

你的代码没有工作,因为你的图像中的"选择"按钮是一个HTML <button>元素而不是<a>元素。当用户单击此按钮时,它调用JavaScript函数在新窗口中打开。所以你的代码不能在这种情况下工作。

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

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

更多信息请参见WebView中的备注示例。NewWindowRequested事件。