我想在我的颤振应用程序的 WebView 的本地存储中设置一些键值对。 我正在使用名为flutter_webview_plugin的库。

我知道这个问题

最终我想设置一个令牌,以便直接访问需要身份验证的 URL,该 URL 在 Chrome 的本地存储中存储为“jwt_token”。

我使用的库提供了一个withLocalStorage属性和一个evalJavascript方法:

flutterWebviewPlugin
        .launch("SOME_URL",
            withLocalStorage: true, withJavascript: true,)
        .whenComplete(() {
      flutterWebviewPlugin.evalJavascript("window.localStorage.setItem('key', 'key')");
      flutterWebviewPlugin.evalJavascript("alert(window.localStorage.getItem('key'))");
      flutterWebviewPlugin.evalJavascript("alert('test alert')");

运行上面的代码后,我的 webview 浏览器中会弹出“测试警报”,这表明evalJavascript方法工作正常,但之前使用localStorage.getItem方法的警报没有弹出。 我尝试过使用和不使用 window 对象,所有 '' "" 组合,结果都是一样的。 我无法使用此 JS 方法在本地存储中设置信息。 你能帮我吗 ?

#1楼 票数:1

你可以使用我的插件flutter_inappwebview ,这是一个 Flutter 插件,它允许你添加内联 WebView 或打开应用程序内浏览器窗口,并且有很多事件、方法和选项来控制 WebView。

默认情况下启用localStorage功能!

这是一个在页面停止加载时设置和检索localStorage值的快速示例:

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

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

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

class _MyAppState extends State<MyApp> {
  InAppWebViewController _webViewController;

  @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(
                    initialUrl: "https://github.com/flutter",
                    initialHeaders: {},
                    initialOptions: InAppWebViewGroupOptions(
                      crossPlatform: InAppWebViewOptions(
                        debuggingEnabled: true,
                      ),
                    ),
                    onWebViewCreated: (InAppWebViewController controller) {
                      _webViewController = controller;
                    },
                    onLoadStart: (InAppWebViewController controller, String url) {

                    },
                    onLoadStop: (InAppWebViewController controller, String url) async {
                      await controller.evaluateJavascript(source: "window.localStorage.setItem('key', 'localStorage value!')");
                      await controller.evaluateJavascript(source: "alert(window.localStorage.getItem('key'))");
                    },
                  ))
            ])),
      ),
    );
  }
}

截屏:

在此处输入图片说明

  ask by mekusi translate from so

未解决问题?本站智能推荐:

1回复

Flutter webivewplugin 如何设置本地存储

我的 Flutter 应用程序流程是这样工作的: 用户登录 1-如果登录成功,服务器返回一个令牌 2-将令牌设置为 webview 中的本地存储 3-将 Webview 全屏打开到特定 URL 我正在使用此 Webview 插件。 示例代码显示它支持本地存储(它有一个 withLocalStora
1回复

Dart Flutter 中的本地存储

我现在已经尝试使用包 shared_preferences 来操作本地存储。 我的问题是: 如何在flutter socket io中使用本地存储? 推荐使用的软件包是什么,使用起来有多容易?
1回复

Flutter-web Webview 使用多个LocalStorage 管理

您好,我在我的 Webapp 案例使用中使用 Webviews 时遇到问题:仪表板,它正在加载多个 Webviews,其中每个具有每个本地存储的 Webview 都与主本地存储合并。 第一个问题:我不得不使用easywebview包来解决我在chrome上加载webview的webviews问题,
1回复

如何在颤振中将 API 模型对象存储在本地存储中?

我在我的代码中使用 Local Storage(shared_preferences: ^2.0.6) 期间遇到了这个问题......但我无法将 api 模型对象存储在本地存储中......我该怎么办?
1回复

即使在颤振中从本地存储获取文件时使用 try catch 之后,方法“readCounter”也被调用为 null

我想将数据存储在本地文件中以进行持久化。 所以,我首先尝试了 flutter.dev 上给出的例子,它在一个单独的项目上工作,但是当我在我正在处理的应用程序中实现同样的事情时,它抛出了一个错误,我不知道为什么会这样做。 最初文件是空的,所以 try catch 语句应该可以工作,我在示例项目中测试了
1回复

Flutter Webview - 键盘不会自动关闭

当我点击一个输入框,键盘会自动打开,但是当我按okay或其他地方,键盘不会自动关闭。 如何在失去焦点时隐藏软键盘? 我将下面的代码块添加到我的代码中,但它不起作用。 Webview 一直停留在白屏上。 截屏
1回复

flutter webview_flutter插件由于gradle问题而无法工作?

向Flutter项目添加Flutter WebView插件时出现Gradle错误 嗨,我用flutter开发了一个应用程序,并且直到我向其中添加flutter webview插件,然后它出现此错误为止,它一直有效: 我尝试更改android文件夹中的gradle版本,但没有解决问题
11回复

如何使用 flutter dart webview 渲染本地 HTML 文件

我想使用 flutter 和 dart 在 webview 中呈现存储在手机内存中的本地 HTML 文件。