webview_flutter是一种用于在移动应用中显示网页内容的Flutter插件。它提供了一个WebView小部件,允许开发人员在移动应用中嵌入网页。在WebView中打开链接时,通常会遇到目标_blank不起作用的问题。
目标_blank是HTML中的一个属性,用于指定链接在新标签页或新窗口中打开。然而,对于webview_flutter插件,默认情况下,它不支持在新标签页或新窗口中打开链接。这是因为webview_flutter插件在内部使用的是原生WebView组件,而原生WebView在默认情况下也不支持在新标签页或新窗口中打开链接。
为了解决这个问题,开发人员可以通过自定义代码来实现在WebView中打开链接的功能。一种常用的方法是使用JavaScript来捕获网页中的链接点击事件,并通过与Flutter的通信来请求在新标签页或新窗口中打开链接。下面是一个示例代码:
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter/platform_interface.dart';
class MyWebView extends StatefulWidget {
@override
_MyWebViewState createState() => _MyWebViewState();
}
class _MyWebViewState extends State<MyWebView> {
WebViewPlatformController? _controller;
@override
Widget build(BuildContext context) {
return WebView(
initialUrl: 'https://example.com',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (controller) {
_controller = controller;
_controller?.loadUrl('https://example.com');
},
navigationDelegate: (NavigationRequest request) {
if (request.url != 'https://example.com') {
// 打开新的标签页
_controller?.evaluateJavascript('window.open("${request.url}","_blank");');
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
);
}
}
在上述代码中,我们通过设置navigationDelegate来拦截WebView中的导航请求。当检测到有链接将要在新标签页或新窗口中打开时,我们使用JavaScript的window.open方法来请求在新标签页中打开该链接。
关于webview_flutter插件的更多信息和使用方法,您可以查阅腾讯云文档中关于Flutter插件的介绍:webview_flutter插件介绍。
请注意,以上提供的解决方案是基于webview_flutter插件的一种实现方式,具体的实现可能因应用需求和具体场景而有所不同。
领取专属 10元无门槛券
手把手带您无忧上云