HarmonyOS 鸿蒙Next中webview_flutter重定向url ERR_UNKKNOWN_URL_SCHEME
HarmonyOS 鸿蒙Next中webview_flutter重定向url ERR_UNKKNOWN_URL_SCHEME 【问题描述】:带有重定向功能的web url 页面在 webview_flutter上无法正常显示
【问题现象】:加载url的时候onWebResourceError 返回错误码 ERR_UNKNOWN_URL_SCHEME
【版本信息】:
【复现代码】:
initWebViewController(BuildContext context) {
late final PlatformWebViewControllerCreationParams params;
if (WebViewPlatform.instance is OhosWebViewPlatform) {
params = OhosWebViewControllerCreationParams(isAllowFullScreenRotate: true);
} else {
params = PlatformWebViewControllerCreationParams();
}
final wvController = WebViewController.fromPlatformCreationParams(params);
if (wvController.platform is OhosWebViewController) {
OhosWebViewController.enableDebugging(true);
(wvController.platform as OhosWebViewController)
.setMediaPlaybackRequiresUserGesture(false);
// ..setOnShowFileSelector(_androidFilePicker)
}
wvController
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setNavigationDelegate(
NavigationDelegate(
onProgress: (int progress) {
debugPrint('WebView onProgress progress: $progress%');
},
onPageStarted: (String url) {
debugPrint('WebView onPageStarted loading: $url');
},
onPageFinished: (String url) {
debugPrint('WebView onPageFinished loaded: $url');
},
onUrlChange: (change) async {
debugPrint('WebView onUrlChange changed: $change');
final canGoBack = await wvController.canGoBack();
controller.onCanGoBack(canGoBack);
},
onWebResourceError: (WebResourceError error) {
print('Lyz --> onWebResourceError');
debugPrint('WebView onWebResourceError error: ${error.description}');
},
onNavigationRequest: (request) async {
if (request.url.startsWith('tel:')) {
final tel = Uri.parse(request.url);
if (await canLaunchUrl(tel)) {
await launchUrl(tel);
} else {
EasyLoading.showToast('设备暂不支持拨打电话');
}
return NavigationDecision.prevent;
} else if (request.url.contains('pay/yeepay/notify') && !request.url.contains('callBackUrl')) {
return NavigationDecision.prevent;
} else if (request.url.startsWith('wkzuche:')) {
final splitResult = request.url.split(':');
if (splitResult.length != 3) {
return NavigationDecision.navigate;
}
controller.handlerAction(
splitResult[1],
Uri.decodeComponent(splitResult[2]),
);
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
),
)
..addJavaScriptChannel(
'Toaster',
onMessageReceived: (JavaScriptMessage message) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(message.message)),
);
},
);
if (!controller.isLoaded) {
wvController.loadRequest(Uri.parse(controller.webPath));
controller.pageLoaded(true);
}
controller.addWebController(wvController);
return wvController;
}
初始化WebViewWidget
body: SafeArea(
child: Obx(
() => true
? WebViewWidget(
controller: initWebViewController(context),
).build(context)
: Container(),
),
),
更多关于HarmonyOS 鸿蒙Next中webview_flutter重定向url ERR_UNKKNOWN_URL_SCHEME的实战教程也可以访问 https://www.itying.com/category-92-b0.html
您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:
- 补全复现代码,让参与用户更快速复现您的问题;
- 更多提问技巧,请参考:【Tips】如何提个好问题
更多关于HarmonyOS 鸿蒙Next中webview_flutter重定向url ERR_UNKKNOWN_URL_SCHEME的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在HarmonyOS鸿蒙Next中使用webview_flutter
时,如果遇到ERR_UNKNOWN_URL_SCHEME
错误,通常是因为WebView无法处理特定的URL协议(如tel:
、mailto:
等)。解决方法是在WebViewController
中拦截这些URL,并通过原生代码处理。例如,使用url_launcher
插件来打开外部应用。具体实现可以参考Flutter官方文档或社区资源。