iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Flutter webview与网页通讯交互实现
  • 487
分享到

Flutter webview与网页通讯交互实现

2024-04-02 19:04:59 487人浏览 薄情痞子
摘要

目录前言预览具体实现Flutter中使用ds_bridge网页端使用dsbridge_flutter总结前言 在app开发中我们有jsBridge来实现app和网页端通讯,现参考JS

前言

在app开发中我们有jsBridge来实现app和网页端通讯,现参考JSBridge实现了Flutter WEBview和网页端通讯。

预览

flutter

import 'package:ds_bridge/ds_bridge.dart';
class JsBridgeUtil {
  // 向H5调用接口
  static executeMethod(flutterWebViewPlugin, String JSONStr) async{
    DsBridge dsBridge = DsBridge(flutterWebViewPlugin);
    Result result = dsBridge.dispatch(jsonStr);
    if(result.method == 'share'){
      result.callBack('收到网页端share事件,内容为${result.data}并返回此文本给网页');
    }
    if(result.method == 'share1'){
      result.callBack('收到网页端share1事件');
    }
  }
}

网页

import 'dsbridge_flutter'
dsBridge.call('share', { name: 'woyehaizaixiang' }, function (res) {
  alert(res)
})

具体实现

flutter中使用ds_bridge

此包是flutter_webview_pluginwebview与网页交互的工具包,需要先添加flutter_webview_plugin组件,具体flutter_webview_plugin组件使用请前往官网查看 ,在添加flutter_webview_plugin组件后,添加ds_bridge组件

1.配置依赖包

dependencies:
    ds_bridge: ^0.0.1

2.在webview页面添加javascriptChannel

webview.dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:yundk_app/routes/application.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
import '../../utils/JsBridgeUtil.dart';

class WebviewPage extends StatefulWidget {
  final String url;
  final VoidCallback backCallback;

  WebviewPage({
    Key key,
    @required this.url,
    this.backCallback,
  }) : super(key: key);

  @override
  _WebviewPageState createState() => _WebviewPageState();
}

class _WebviewPageState extends State<WebviewPage> {
  String _title = '';
  final flutterWebViewPlugin = FlutterWebviewPlugin();
  final Set<JavascriptChannel> jsChannels = [
    JavascriptChannel(
        name: 'DsBridgeApp',
        onMessageReceived: (JavascriptMessage msg) {
          String jsonStr = msg.message;
          JsBridgeUtil.executeMethod(FlutterWebviewPlugin(), jsonStr);
        }),
  ].toSet();

  StreamSubscription<String> _onUrlChanged;

  @override
  void initState() {
    super.initState();
    flutterWebViewPlugin.close();

    // 监听 url changed
    _onUrlChanged =
    flutterWebViewPlugin.onUrlChanged.listen((String url) async {

    });

    // 监听页面onload
    flutterWebViewPlugin.onStateChanged.listen((viewState) async {
      if (viewState.type == WebViewState.finishLoad) {
        flutterWebViewPlugin.evalJavascript('document.title').then((result) => {
          setState(() {
            _title = result;
          })
        });
      }
    });

  }

  @override
  void dispose() {
    _onUrlChanged.cancel();
    flutterWebViewPlugin.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: WebviewScaffold(
        appBar: new AppBar(
          leading: IconButton(
            hoverColor: Colors.transparent,
            highlightColor: Colors.transparent,
            icon: Icon(const IconData(0xe61b, fontFamily: 'IconFont'), color: Color(0xff333333), size: 18),
            onPressed: (){
              flutterWebViewPlugin.close();
              Application.router.pop(context);
            },
          ),
          title: new Text(
            _title,
            style: TextStyle(color: Color(0xff333333), fontSize: 17),
          ),
          actions: [
            new IconButton(
              icon: new Icon(
                Icons.refresh_outlined,
                color: Color(0xff333333),
                size: 20
              ),
              onPressed: () {
                flutterWebViewPlugin.reload();
              }
            ),
          ],
          centerTitle: true,
          elevation: 0,
        ),
        url: widget.url,
        javascriptChannels: jsChannels,
        mediaPlaybackRequiresUserGesture: false,
        withZoom: true,
        withLocalStorage: true,
        hidden: true,
      )
    );
  }
}

3.在JsBridgeUtil类中

utils/JsBridgeUtil.dart

import 'package:ds_bridge/ds_bridge.dart';
class JsBridgeUtil {
  // 向H5调用接口
  static executeMethod(flutterWebViewPlugin, String jsonStr) async{
    DsBridge dsBridge = DsBridge(flutterWebViewPlugin);
    Result result = dsBridge.dispatch(jsonStr);
    if(result.method == 'share'){
      result.callBack('收到网页端share事件,内容为${result.data}并返回此文本给网页');
    }
    if(result.method == 'share1'){
      result.callBack('收到网页端share1事件');
    }
  }
}

网页端使用dsbridge_flutter

插件为网页端插件,配合flutter端ds_bridge一起使用

1.安装

npm install dsbridge_flutter

2.使用

import 'dsbridge_flutter'
dsBridge.call(<String> method, <Object> data, <Function> callback)

3.例子

import 'dsbridge_flutter'
dsBridge.call('share', { name: 'woyehaizaixiang' }, function (res) {
  alert(res)
})

总结

本文参考JSBridge实现了Flutter webview和网页端交互。具体用到的插件有Flutter端flutter_webview_plugin和ds_bridge、网页端有dsbridge_flutter。

到此这篇关于Flutter webview与网页通讯交互实现的文章就介绍到这了,更多相关Flutter webview与网页通讯内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Flutter webview与网页通讯交互实现

本文链接: https://www.lsjlt.com/news/145866.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter webview与网页通讯交互实现
    目录前言预览具体实现flutter中使用ds_bridge网页端使用dsbridge_flutter总结前言 在app开发中我们有JSBridge来实现app和网页端通讯,现参考JS...
    99+
    2024-04-02
  • Flutter与Webview交互
    flutter层不支持webview,加载网页的功能还需要借助控件来处理。 通过pub.dev搜索以及对比网上文章,发现了几个比较受欢迎的flutter webview插件; ...
    99+
    2023-09-14
    flutter 前端 Powered by 金山文档
  • Flutter中实现交互式Webview的方法
    前言: Flutter是一款强大的跨平台移动应用开发框架,而Webview则是在应用中展示Web内容的重要组件。本文将介绍如何在Flutter应用中实现交互式的Webview,以便为用户提供更加丰...
    99+
    2023-09-10
    flutter
  • flutter开发实战-实现webview与Javascript通信JSBridge
    flutter开发实战-实现webview与H5中Javascript通信JSBridge 在开发中,使用到webview,flutter实现webview是使用原生的插件实现,常用的有webview_flutter与flutter_ina...
    99+
    2023-08-18
    flutter html javascript webview jsbridge
  • flutter开发实战-inappwebview实现flutter与Javascript的交互JSBridge
    flutter开发实战-inappwebview实现flutter与Javascript的交互JSBridge 在使用webview中,需要实现flutter与Javascript交互,在使用webv...
    99+
    2023-10-12
    flutter javascript 交互 inappwebview HTML5 JSBridge webview
  • 基础巩固(五)Android通过WebView与Js交互
    文章目录 简介WebView基本使用常用方法WebView的生命周期 / 状态切换关于前进 / 后退网页清除缓存数据 常用类WebSettings类常见用法:设置WebView缓存 ...
    99+
    2023-09-02
    android javascript 交互
  • 微信小程序与webview H5交互怎么实现
    这篇文章主要介绍“微信小程序与webview H5交互怎么实现”,在日常操作中,相信很多人在微信小程序与webview H5交互怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小...
    99+
    2023-07-04
  • Android与H5交互 -- 点击H5跳转到 Android原生 页面 ,webview与h5(js)交互
    目录标题 Android与H5交互一、清单文件,增加的配置二、在你需要跳转的页面,清单文件中加入如下配置:三、整体结构布局如下 :四、贴一下html里面的代码吧五、具体实现如下: ...
    99+
    2023-09-17
    android studio
  • 小程序webview组件,小程序和webview交互,小程序内联h5页面,小程序webview内网页实现微信支付
    小程序支持webview以后,我们开发的好多h5页面,就可以直接在小程序里使用了,比如我们开发的微信商城,文章详情页,商品详情页,就可以开发一套,多处使用了。我们今天来讲一讲。在小程序的webview里实现微信支付功能。因为微信不允许在小...
    99+
    2023-09-18
    小程序 微信 交互 vue.js 前端框架
  • PHP与Web页面交互例子的实现
    目录1. HTML 部分2. PHP 部分3. 执行结果如下所示1. HTML 部分 1.1 新建 10-29.html 文件 1.2 引用 PHP 文件(10-29.PHP) &...
    99+
    2024-04-02
  • Ajax与Python服务器交互,在网页
    说一下大概的思路:1.目标:在输入框输入Python3代码,点击运行,右边显示代码结果。2.步骤:那首先我们需要一个页面来显示我们的输入输出,还有一个按钮;然后就是通过点击按钮事件获取输入的内容;(用到了Ajax与服务器交互;它会自动封装请...
    99+
    2023-01-31
    服务器 网页 Ajax
  • Bash 路径如何与 ASP 网页交互?
    Bash 是一种流行的 Unix Shell,其作为一个命令行解释器,常用于在 Linux 系统中进行编程和系统管理任务。ASP 是一种用于构建动态 Web 应用程序的 Microsoft 技术,它使用 VBScript 和 JScrip...
    99+
    2023-10-20
    响应 bash path
  • WebGL与网页交互问题怎么解决
    今天小编给大家分享一下WebGL与网页交互问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。(一)首先说Unity调...
    99+
    2023-06-30
  • golang与pgsql交互的实现
    目录1、目的2、代码架构3、代码展示1、目的 通过读取配置文件获取pgsql用户名和密码及数据库和数据表,从而读取所需字段值。 2、代码架构 config/config.go:读取...
    99+
    2023-03-19
    golang pgsql交互 golang pgsql
  • 关于ios客户端与web网页js交互
    iOS与JS的交互可以通过以下几种方式实现: 使用UIWebView或WKWebView加载Html页面并在其中添加Javascript脚本,通过WebView的代理方法捕获Javascript脚本发出的事件,从而实现与iOS原生代码的交互...
    99+
    2023-09-16
    javascript ios 前端
  • JavaScript与HTML怎么实现交互
    这篇文章主要介绍“JavaScript与HTML怎么实现交互”,在日常操作中,相信很多人在JavaScript与HTML怎么实现交互问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • PHP与Javascript怎么实现交互
    PHP与Javascript怎么实现交互,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。PHP与Javascript交互的方法:通过Cookie交互。一共是三个文件,分别为:...
    99+
    2023-06-17
  • 微信小程序webview与h5通过postMessage实现实时通讯的示例分析
    这篇文章给大家分享的是有关微信小程序webview与h5通过postMessage实现实时通讯的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在做 React Nativ...
    99+
    2024-04-02
  • Android WebView如何实现网页的刷新
    Android WebView如何实现网页的刷新 一、引言 在Android应用开发中,我们经常需要将网页嵌入到应用中展示,这时就可以使用Android提供的WebView组件。而在展示网页的过程中,...
    99+
    2023-10-22
    android Android
  • golang与pgsql交互如何实现
    本文小编为大家详细介绍“golang与pgsql交互如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang与pgsql交互如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、目的通过读取配置文...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作