首页 > 其他分享 >App和H5交互

App和H5交互

时间:2022-11-15 16:37:59浏览次数:46  
标签:调用 Int App 支持 JS Long webView H5 交互

前置操作

Android

//前端需要载NativeMethod对象到window上
//在index.html文件中强烈建议添加下面代码
<script>
    window.NativeMethod = NativeMethod;
</script>

Android
webView.addJavascriptInterface(JSInterface(), "NativeMethod")
class JSInterface{
	  @JavascriptInterface
	  fun name([params :[Long/Int/String/Double/Float/Boolean]]){
	 }
}

IOS
//注册 相关方法名outputParam
webView.configuration.userContentController.add(self, name: "outputParam")
extension ViewController: WKScriptMessageHandler {
	//监听相关方法的回调
	func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
			if message.name == "outputParam" {
					self.callLocal(message: message.body)
			}
	}b

	private func callLocal(message: Any) {
			
	}
}

JS 调用原生

参数类型 IOS Android
Int 支持 支持
Long 支持 支持
Int 支持 支持
Double 支持 支持
Float 支持 支持
Boolean 支持 支持
String 支持 支持
Object 支持 不支持(支持null)
Array 支持 不支持

实现方式

Android
window.NativeMethod.functionName()//无参数
window.NativeMethod.functionName([Double/Float/Long/Int/Boolean/null/String]))

IOS 
window.webkit.messageHandlers.functionName.postMessage([Double/Float/Long/Int/Boolean/null/String/Array])

原生调用JS

参数类型 IOS Android 备注
Int 支持 支持
Long 支持 支持
Int 支持 支持
Double 支持 支持
Float 支持 支持
Boolean 支持 支持
String 支持 支持 需要加单引号''
Object 不支持 不支持(支持null和json字符串不带引号)
Array 不支持 不支持

实现方式

Android 注意调用的线程 需要
webView.loadUrl("javascript:funName()")//无参数
webView.loadUrl("javascript:funName(\'字符串\')")//字符串必须带单引号才能被前端识别
webView.loadUrl("javascript:funName([Double/Float/Long/Int/Boolean/null/jsonString])")// 带引号

原生调用JS方法

原生调用同步方法

Android
//方法参考调用JS方法
webView.evaluateJavascript("javascript:functionName(params :[Long/Int/String/Double/Float/Boolean])", 
		ValueCallback {
		//同步方法
})

self.webView.evaluateJavaScript(jsString) { [weak self] data, error in
    if (error == nil) {
        // JS同步方法的返回值
        print(data)
    } else {
        // 执行JS脚本有误
        callback(error?.localizedDescription)
    }
}

前端处理
function functionName(params) {
	// ...
	return data;
}

原生调用异步方法

不支持异步调用,需要异步方式可以

  1. 原生调用JS的方法
  2. JS调用原生方法来触发异步
  3. JS异步完成后再通过JS调用原生方法来完成一次异步交互

标签:调用,Int,App,支持,JS,Long,webView,H5,交互
From: https://www.cnblogs.com/alasola/p/16892845.html

相关文章

  • Manico Mac苹果电脑快速App启动和切换工具软件
    mac软件下载:ManicoforMac为macOS设计的快速的App启动和切换工具。使用它,在macOS上启动及切换App将变得无比顺畅。在长期的使用过程中,用户还将形成肌肉记忆,从而......
  • 以太坊dApp入门开发
    一、环境搭建1、安装nodejs,附带npm2、本地搭建hardhat开发环境mkdirmy-wave-portalcdmy-wave-portalnpmconfigsetregistryhttps://registry.npm.taobao.orgnpm......
  • uniapp 实现小程序中自定义tabBar
    uniapp实现小程序中自定义tabBar的方法第一种方式:page.json中配置"tabBar":{"color":"#7A7E83","selectedColor":"#007AFF","borderStyle":"black",......
  • 直播软件app开发,js 表单验证,登录注册
     直播软件app开发,js表单验证,登录注册<!DOCTYPEhtml><html> <head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  ......
  • 微信appid、openid、unionid的区别和关联
    来源:https://blog.csdn.net/qq_41990222/article/details/111587331applicationidentification(简称appid)是应用标识OpenID是一个以用户为中心的数字身份识别框架Un......
  • uniapp 小程序接入51LA统计数据
    mpa-stat-config.js文件:exports.appKey='7********6'//请在此行填写从51LA小程序统计后台获取的appkeyexports.ignoreDev=true//默认关闭在开发模式下向服务器发......
  • uniapp-小程序-提审显示地理位置接口未配置
    在manifest.json的源码视图中添加即可:需要哪些就增加哪些获取两个getLocation、chooseAddress"requiredPrivateInfos":["getLocation","ch......
  • 检查appium环境报错Error running xcrun simctl
    在终端输入appium-doctor检查环境报错:Errorrunningxcrunsimctl如下图:这个是由于Xcode没有选择版本号导致的解决方案:1、这个是Xcode的问题,Xcode安装之后,simctl可以......
  • CF903E Swapping Characters
    CF903E:一个复杂度较优的做法首先对于题目情况分类讨论一下,整理出2种主要情况:即分别有3,4个位置不同,对于具体情况直接模拟即可。为什么两个位置不同不行呢?因为无法保证......
  • Maximum Number of Non-overlapping Palindrome Substrings
    MaximumNumberofNon-overlappingPalindromeSubstrings、Youaregivenastring s anda positiveintegerk .Selectasetofnon-overlappingsubstringsfr......