«Uncaught SecurityError: не удалось прочитать свойство 'cook ie' из 'Document': файлы cookie отключены внутри 'data:' URL-адресов». Веб-просмотр Flutter - PullRequest
0 голосов
/ 26 мая 2020
WebView(initialUrl:Uri.dataFromString('<script type="text/javascript" src="https://cdn.embedly.com/widgets/platform.js"></script>'+<html>Some code</html>,mimeType: 'text/html').toString(), javascriptMode: JavascriptMode.unrestricted,),

Этот CDN выдает следующую ошибку:

Uncaught SecurityError: не удалось прочитать свойство 'cook ie' из 'Document': файлы cookie отключены внутри 'data:' URL-адресов . "Flutter webview

1 Ответ

0 голосов
/ 31 мая 2020

Вы можете попробовать мой плагин flutter_inappwebview , который является плагином Flutter, который позволяет вам добавлять встроенные WebView или открывать окно браузера в приложении и имеет множество событий, методов и параметров для управления WebViews. .

В вашем случае вы можете использовать аргумент initialData и установить свой собственный HTML через атрибут InAppWebViewInitialData.data и установить InAppWebViewInitialData.baseUrl на http://localhost:

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';

Future main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(new MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {
  InAppWebViewController webView;
  String customHTML = "";

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

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('InAppWebView Example'),
        ),
        body: Container(
            child: Column(children: <Widget>[
          Expanded(
              child: InAppWebView(
                initialData: InAppWebViewInitialData(data: """
<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>InAppWebViewInitialDataTest</title>
        <script type="text/javascript" src="https://cdn.embedly.com/widgets/platform.js"></script>
    </head>
    <body>
        $customHTML
    </body>
</html>
                    """, baseUrl: 'http://localhost'),
            initialHeaders: {},
            initialOptions: InAppWebViewGroupOptions(
              crossPlatform: InAppWebViewOptions(
                  debuggingEnabled: true,
              )
            ),
            onWebViewCreated: (InAppWebViewController controller) {
              webView = controller;
            },
            onLoadStart: (InAppWebViewController controller, String url) {

            },
            onLoadStop:(InAppWebViewController controller, String url) {

            },
          ))
        ])),
      ),
    );
  }
}

Теперь у вас есть доступ к document.cookie, используя JavaScript!

Другой способ - поместить HTML в файл ресурсов (см. Загрузить файл в папку ресурсов Раздел ), а затем вы можете использовать InAppLocalhostServer, чтобы запустить локальный сервер для обслуживания вашего файла HTML с вашим скриптом.

...