Веб-просмотр Flutter: ошибки ssl_client_socket_impl и Uncaught SecurityError

Я пытаюсь отправить файл cookie на мою страницу веб-просмотра Flutter. Итак, я установил webview_flutter: ^ 1.0.7 и использую вот так:

  @override
  void initState() {
    super.initState();
    _controller.future.then((controller) async {
      wvc = controller;
      Map<String, String> header = {};
      // 1 :
      wvc.evaluateJavascript('document.cookie="SESSION-Test=token";');
      wvc.loadUrl("https://webmobile.parsian-bank.ir/WebView/CoTest.html");
      // 2 :
      // header = {"SESSION": "12343254"};
      // wvc.loadUrl("https://webmobile.parsian-bank.ir/WebView/CoTest.html",
      // headers: header);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
          child: WebView(
        initialMediaPlaybackPolicy: AutoMediaPlaybackPolicy.always_allow,
        debuggingEnabled: true,
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (webViewController) async {
          _controller.complete(webViewController);
        },
        onPageFinished: (val) async {
          String cookies = await wvc.evaluateJavascript('document.cookie');
          print("---> cookie is $cookies");
        },
      )),
    );
  }
}

CoTest.html имеет простой код:

<!DOCTYPE html>
<html dir="rtl" lang="fa-IR" "=""><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style class="vjs-styles-defaults">
      .video-js {
        width: 300px;
        height: 150px;
      }

      .vjs-fluid {
        padding-top: 56.25%
      }
    </style>
</head>
<body>
<script>
 document.write(  "cookies are === >>>>>>       " + document.cookie + "            <<<<<<");
 </script>cookies are === &gt;&gt;&gt;&gt;&gt;&gt;                   &lt;&lt;&lt;&lt;&lt;&lt;
</body></html>

Но когда я пытаюсь показать страницу, у меня возникают эти ошибки, и я просто получаю пустой экран:

E/chromium( 6140): [ERROR:ssl_client_socket_impl.cc(946)] handshake failed; returned -1, SSL error code 1, net_error -202
I/chromium( 6140): [INFO:CONSOLE(1)] "Uncaught SecurityError: Failed to read the 'cookie' property from 'Document': Access is denied for this document.", 

Это основной манифест:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.testt">
    
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="testt"
        android:icon="@mipmap/ic_launcher"
        android:usesCleartextTraffic="true">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>

Обновление:

Проблема с Cookie-менеджером работает на IOS 11+.


person Cyrus the Great    schedule 11.01.2021    source источник


Ответы (1)


Вы можете использовать пакет https://pub.dev/packages/webview_cookie_manager
WebCookieManager может быть используется напрямую или вместе с webview_flutter.

Из открытого вопроса [WebView] Provide a way to set cookies https://github.com/flutter/flutter/issues/27597
Текущее решение - https://github.com/flutter/flutter/issues/27597#issuecomment-657293123
... теперь вы можете использовать WebviewCookieManager с flutter_webview

фрагмент кода

return WebView(
  // initialUrl: '',
  onWebViewCreated: (WebViewController controller) async {
    await WebviewCookieManager().setCookies([
      Cookie('SESSION-Test', 'token')
        ..domain = 'webmobile.parsian-bank.ir'
        ..httpOnly = false
    ]);

    controller.loadUrl('https://webmobile.parsian-bank.ir/WebView/CoTest.html');
  },

webview_cookie_manager официальный пример https://github.com/fryette/webview_cookie_manager/blob/master/example/lib/main.dart

webview_cookie_manager официальный пример фрагмента кода

  final String _url = 'https://youtube.com';
  final String cookieValue = 'some-cookie-value';
  final String domain = 'youtube.com';
  final String cookieName = 'some_cookie_name';

  @override
  void initState() {
    super.initState();
    cookieManager.clearCookies();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
          actions: [
            IconButton(
              icon: Icon(Icons.ac_unit),
              onPressed: () async {
                // TEST CODE
                await cookieManager.getCookies(null);
              },
            )
          ],
        ),
        body: WebView(
          initialUrl: _url,
          javascriptMode: JavascriptMode.unrestricted,
          onWebViewCreated: (controller) async {
            await cookieManager.setCookies([
              Cookie(cookieName, cookieValue)
                ..domain = domain
                ..expires = DateTime.now().add(Duration(days: 10))
                ..httpOnly = false
            ]);
          },
person chunhunghan    schedule 11.01.2021
comment
большая проблема webview_cookie_manager работает на iOS 11.0+. Я использовал InAppWebView и CookieManager, но он работает на iOS 11.0+, поэтому, если я использую iOS 10, ни один из них не работает ///**NOTE for iOS**: available from iOS 11.0+. class CookieManager { @chunhunghan - person Cyrus the Great; 11.01.2021
comment
Я хочу работать на IOS и ANDROID @chunhunghan - person Cyrus the Great; 11.01.2021