防止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?
你的代码没有工作,因为你的图像中的"选择"按钮是一个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事件。