我有一个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上保持打开状态?
答案 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中的备注和示例。