Flutter webview 连接在 web 中被拒绝

Flutter webview connection refused in web

提问人:GHH 提问时间:2/21/2023 更新时间:11/18/2023 访问量:361

问:

我想使用 和 构建一个带有 WebView 的应用程序。AndroidIOSWeb

所以我下载了这个样本

当我加载“https://flutter.dev”时它起作用enter image description here

但是当我将 url 更改为“https://www.google.com”时,网络会出现错误连接被拒绝。

模拟器仍然有效。enter image description here如何解决

另外,你有没有建议库在 上构建 WebView?AndroidIOSWeb

我尝试了几种流行的,但它们都很难使用。

Android Flutter 网页视图

评论

0赞 Saurabh Jain 11/15/2023
嗨,@GHH,你找到解决方案了吗?我也有同样的情况。如果你能找到解决方案,我很乐意得到帮助。

答:

0赞 MendelG 11/16/2023 #1

请参阅 Github 问题/文档

  1. 不支持 iframe 嵌入的普通 URL(例如 https://google.com,您需要为此使用)。SourceType.urlBypass
 webviewController.loadContent(
                'https://google.com',
                SourceType.urlBypass,
              );

完整示例:

import 'package:flutter/material.dart';
import 'package:webviewx/webviewx.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyWebViewPage(),
    );
  }
}

class MyWebViewPage extends StatefulWidget {
  @override
  _MyWebViewPageState createState() => _MyWebViewPageState();
}

class _MyWebViewPageState extends State<MyWebViewPage> {
  late WebViewXController webviewController;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WebViewX Example'),
      ),
      body: Column(
        children: [
          WebViewX(
            initialContent: 'https://example.com',
            // initialSourceType: SourceType.,
            onWebViewCreated: (controller) => webviewController = controller,
            onWebResourceError: (error) {
              print('WebViewX Error: ${error.errorCode}, ${error.description}');
            },
            // ... other options

            width: 400,
            height: 400,
          ),
          ElevatedButton(
            onPressed: () {
              // Load a URL when the button is pressed
              webviewController.loadContent(
                'https://google.com',
                SourceType.urlBypass,
              );
            },
            child: Text('Load Google Website'),
          ),
          ElevatedButton(
            onPressed: () {
              // Go back in the webview's history
              webviewController.goBack();
            },
            child: Text('Go Back'),
          ),
          ElevatedButton(
            onPressed: () {
              // Go forward in the webview's history
              webviewController.goForward();
            },
            child: Text('Go Forward'),
          ),
        ],
      ),
    );
  }
}

enter image description here

评论

0赞 Saurabh Jain 11/16/2023
我用于在 Web 平台上的对话框中启动 URL,如下所示: ' final IFrameElement iFrameElement = IFrameElement() ..src = 网址 ..attributes['sourceType'] = 'urlBypass' ..style.border = '无' ..style.width = '100%' ..style.height = '100%';'不过,我也有同样的问题。iFrameElement
0赞 Siddarth Jain 11/18/2023 #2

而不是使用 https://pub.dev/packages/webviewx

使用 https://pub.dev/packages/webview_flutter

这是官方图书馆

像这样使用 ->

enter image description here

对于 webview,请使用 iFrameElement,但只有在启用 CORS 策略时才有效

评论

0赞 Cypher 11/22/2023
这会支持 Web 平台吗?webview_flutter
0赞 Siddarth Jain 11/24/2023
对于 webview,请使用 iFrameElement,但只有在启用 CORS 策略时才有效