当前位置: 首页 > news >正文

网站搜索框怎么做江门网页设计

网站搜索框怎么做,江门网页设计,炉石吐司做的网站,建设网站托管费用flutter开发实战-inappwebview实现flutter与Javascript方法调用 在使用inappwebview时候,需要flutter端与JS进行交互,调用相应的方法,在inappwebview中的JavaScript Handlers。 一、JavaScript Handlers 要添加JavaScript Handlers&#…

flutter开发实战-inappwebview实现flutter与Javascript方法调用

在使用inappwebview时候,需要flutter端与JS进行交互,调用相应的方法,在inappwebview中的JavaScript Handlers。
在这里插入图片描述

一、JavaScript Handlers

要添加JavaScript Handlers,可以使用InAppWebViewController.addJavaScriptHandler方法,在该方法中定义handlerName和JavaScript端调用它时要调用的回调。回调可以返回要在JavaScript端发送的数据。如果您需要在加载网页后立即管理JavaScript处理程序,则应在创建InAppWebView时调用InAppWebViewController.addJavaScriptHandler。

以下是如何注册JavaScript处理程序的示例:

onWebViewCreated: (controller) {// register a JavaScript handler with name "myHandlerName"controller.addJavaScriptHandler(handlerName: 'myHandlerName', callback: (args) {// print arguments coming from the JavaScript side!print(args);// return data to the JavaScript side!return {'bar': 'bar_value', 'baz': 'baz_value'};});
},

在JavaScript端,要执行回调处理程序并将数据发送到Flutter,您需要使用window.Flutter_inappwebview.callHandler(handlerName,…args)方法,其中handlerName是一个字符串,表示您正在调用的处理程序名称,args是可以发送到Fluter方面的可选参数。

注意:

如果相更换一个名字,我们可以更换一个名字来嵌套window.flutter_inappwebview

window.myCustomObj = { callHandler: window.flutter_inappwebview.callHandler } and, then, you can use window.myCustomObj.callHandler

此外,可以通过这种方式包装整个特定的处理代码:

const myHandlerName = (…args) => window.flutter_inappwebview.callHandler(‘myHandlerName’, …args);

然后调用myHandlerName();

在Javascript端,如果需要调用callHandler,需要监听flatterInAppWebViewPlatformReady。可以使用在flatterInAppWebViewPlatformReady事件被分派时设置的全局标志变量,并在调用window.flutter_inappwebview.callHandler方法之前使用它。

示例代码如下

// execute inside the "flutterInAppWebViewPlatformReady" event listener
window.addEventListener("flutterInAppWebViewPlatformReady", function(event) {const args = [1, true, ['bar', 5], {foo: 'baz'}];window.flutter_inappwebview.callHandler('myHandlerName', ...args);
});// or using a global flag variable
var isFlutterInAppWebViewReady = false;
window.addEventListener("flutterInAppWebViewPlatformReady", function(event) {isFlutterInAppWebViewReady = true;
});
// then, somewhere in your code
if (isFlutterInAppWebViewReady) {const args = [1, true, ['bar', 5], {foo: 'baz'}];window.flutter_inappwebview.callHandler('myHandlerName', ...args);
}

在flutter端,Flutter在执行注入方法时候,调用evaluateJavascript来执行callHandler,这个flutterInAppWebViewPlatformReady无需监听,因为这个flutterInAppWebViewPlatformReady已经Ready了。

可以在onLoadStop中调用代码

onLoadStop: (controller, url) async {await controller.evaluateJavascript(source: """const args = [1, true, ['bar', 5], {foo: 'baz'}];window.flutter_inappwebview.callHandler('myHandlerName', ...args);""");
},

window.flutter_inappwebview.callHandler返回一个JavaScript Promise,该Promise可用于获取回调返回的json结果。在这种情况下,只需返回您想要发送的数据,它将使用dart:convert库中的jsonEncode自动进行json编码。

一个简单的示例代码


import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';Future main() async {WidgetsFlutterBinding.ensureInitialized();if (Platform.isAndroid) {await AndroidInAppWebViewController.setWebContentsDebuggingEnabled(true);}runApp(new MyApp());
}class MyApp extends StatefulWidget {@override_MyAppState createState() => new _MyAppState();
}class _MyAppState extends State<MyApp> {InAppWebViewGroupOptions options = InAppWebViewGroupOptions(android: AndroidInAppWebViewOptions(useHybridComposition: true,),);@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text("JavaScript Handlers")),body: SafeArea(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"></head><body><h1>JavaScript Handlers</h1><script>window.addEventListener("flutterInAppWebViewPlatformReady", function(event) {window.flutter_inappwebview.callHandler('handlerFoo').then(function(result) {// print to the console the data coming// from the Flutter side.console.log(JSON.stringify(result));window.flutter_inappwebview.callHandler('handlerFooWithArgs', 1, true, ['bar', 5], {foo: 'baz'}, result);});});</script></body>
</html>"""),initialOptions: options,onWebViewCreated: (controller) {controller.addJavaScriptHandler(handlerName: 'handlerFoo', callback: (args) {// return data to the JavaScript side!return {'bar': 'bar_value', 'baz': 'baz_value'};});controller.addJavaScriptHandler(handlerName: 'handlerFooWithArgs', callback: (args) {print(args);// it will print: [1, true, [bar, 5], {foo: baz}, {bar: bar_value, baz: baz_value}]});},onConsoleMessage: (controller, consoleMessage) {print(consoleMessage);// it will print: {message: {"bar":"bar_value","baz":"baz_value"}, messageLevel: 1}},),),]))),);}
}

二、监听自定义CustomEvent

可以设置一个消息事件侦听器(与postMessage一起使用)或一个自定义事件侦听器。

// message event listener
window.addEventListener("message", (event) => {console.log(event.data);
}, false);// or custom event listener
window.addEventListener("myCustomEvent", (event) => {console.log(event.detail);
}, false);

然后使用window.dispatch

// using postMessage method
window.postMessage({foo: 1, bar: false});// or dispatching a custom event
const event = new CustomEvent("myCustomEvent", {detail: {foo: 1, bar: false}
});
window.dispatchEvent(event);

因此,可以在运行时使用InAppWebViewController.eevaluatteJavascript方法或在web应用程序内部设置这些事件侦听器,并使用相同的方法调度这些事件。

例如:

onLoadStop: (controller, url) async {await controller.evaluateJavascript(source: """window.addEventListener("myCustomEvent", (event) => {console.log(JSON.stringify(event.detail));}, false);""");await Future.delayed(Duration(seconds: 5));controller.evaluateJavascript(source: """const event = new CustomEvent("myCustomEvent", {detail: {foo: 1, bar: false}});window.dispatchEvent(event);""");
},
onConsoleMessage: (controller, consoleMessage) {print(consoleMessage);// it will print: {message: {"foo":1,"bar":false}, messageLevel: 1}
},

三、小结

flutter开发实战-inappwebview实现flutter与Javascript方法调用。描述可能不是特别准确,请见谅。

学习记录,每天不停进步。

http://www.yayakq.cn/news/861655/

相关文章:

  • 住房和城乡建设部网站防烟排烟制作一款软件需要多少钱
  • 自做业务网站网站原创文章规范
  • 海口建站程序百度 安徽省工程建设信息网站
  • 公司如何建站网站转换移动网站
  • 合肥道路建设从哪个网站可以看到安 网站建设
  • 外贸做网站推广镇江久一信息科技
  • 视频网站为什么有人做如何做海外淘宝网站
  • 24手表网站网页设计精选网站
  • 做一个棋牌网站要多少钱东莞做网络推广的公司
  • 南通营销型网站新网网站制作
  • 淘宝客做网站好还是建群号网络营销和网络销售的关系
  • 微网站建设比较全面的是广州网站建设设计公司信息
  • 做外贸网站流程图深圳网站建设哪个公司号
  • 商业空间设计网站大全最近的国际新闻
  • 大型网站建设教程普斯泰网站建设
  • 南昌做网站的公司多不多企业网站 手机站
  • 手机网站开发方式打广告去哪个平台
  • 苏州网站建设提供商沈阳外贸网站制作公司
  • 猎头建设网站中国建筑考试网官网首页
  • 做网站建设给人销售企业品牌推广价格
  • 服务器可以做几个网站吗中国石油网站建设在线第三次作业
  • 全网最稳最低价自助下单网站注册上海公司
  • 苏州公司网站建设报价常州低价网站建设公司
  • 淄博网站优化服务南宁信息建设网站
  • 好用的土木建筑网站建设网站必须要钱吗
  • 荆州网站建设费用自己建网站要学什么
  • 网站群管理系统哪个好免费高清图片素材网站有哪些
  • 网站如何做注册类 cpa站酷网vi设计
  • 北京网站设计合理刻正版android应用开发教程
  • 网站建设全包广州信息推广