HarmonyOS 鸿蒙Next中webview_flutter重定向url ERR_UNKKNOWN_URL_SCHEME

HarmonyOS 鸿蒙Next中webview_flutter重定向url ERR_UNKKNOWN_URL_SCHEME 【问题描述】:带有重定向功能的web url 页面在 webview_flutter上无法正常显示

链接地址:https://dev-m.wkzuche.com/?source=APP&appVersion=6.5.1&deviceOSVersion=OpenHarmony5.0.0&city_name=北京市&location_city=北京市#/profile/more/contact_us

【问题现象】:加载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

2 回复

您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:

更多关于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官方文档或社区资源。

回到顶部