Skip to content

混合开发 - WEB全局方法

前提

在阅读本文前,你要先把你的网页应用嵌套在uniappx中的x-webview-u组件内浏览器应用, 并在你的应用中引入好tmuiJssdk.js,才能继续往下看。

宿主的方法

下面的方法是宿主原生方法,并且可全局使用,如果你是ts开发,预览类型提示错误, 你可查看下一章jssdkApi介绍。

名称参数返回值说明
tmuiApp.toast(message : string)-系统提示
tmuiApp.refresh--刷新网页
tmuiApp.clearCache--清除缓存并强制刷新,对于需要更新页面内容时非常有用
tmuiApp.navback--回退网页
tmuiApp.forward--前进网页
tmuiApp.postMessage(arg:string)-向宿主app发送消息

web全局方法

下面的方法

名称参数返回值说明
tmuiJssdk--jssdk方法合集见jssdk介绍,引入sdk后即可调用,有类型提示。
uni--只有在tmui3.2 web vue组件被引入才可使用。
tmuiAppTheme--宿主的CSS变量js对象见栏目:css变量,是宿主在你网页载入前主动注入一段js到你的页面中的方法。

web与宿主通信

web向宿主发送消息

使用前面介绍的宿主方法在js中:tmuiApp.postMessage(发送的消息)

这是单向通信,无回调。

宿主组件中:

vue
<x-webview-u @postMessage="postMessage" ></x-webview-u>

// 收到web的消息。
const postMessage = (arg:uniAppPostmessageType) =>{
	console.log(arg.detail)
}

宿主向web发送消息

这是单向通信,无回调。

vue
<x-webview-u ref="webu"></x-webview-u>

const webu = ref<ComponentPublicInstance|null>(null)
// 向web发消息
const postMessage = (arg:uniAppPostmessageType) =>{
	//这里执行web中的一个全局方法
	webu.value?.$callMethod('evaJs',`uni.showToast(${JSON.stringify({title:'Hi喽',icon:'none'})})`)
}

web执行宿主方法并获取返回值

这是双向通信,web执行宿主方法后,得到宿主的执行结果;

通过这个方法,你可以向宿主发消息,并在宿主执行任何函数,以此来拓展web执行宿主方法的事件机制

因为你执行后可以得到结果。

在web中如下执行方法 :

ts

const callMethod = async ()=>{
	const result = await tmuiJssdk.callMethod('任意数据');
	//失败还是成功,返回什么数据由宿主决定。
	console.log(result)
}

宿主响应tmuiJssdk.callMethod方法并返回结果。

vue
<x-webview-u :callMethod="callMethod"></x-webview-u>

import { uniAppPostmessageType,xWebviewUCallMethodType } from "@/uni_modules/x-webview-u";

const callMethod = (message:xWebviewUCallMethodType)=>{
	// 这里可以得到上步web的值
	message.data //就是上步tmuiJssdk.callMethod方法中的参数,这里可以取到。
	//你可以通过自定义的这个消息体来执行你的任何业务逻辑
	// 执行后把结果返回给web
	// 下面的两个方法只要执行其中一个就行,收到消息后一定要执行其中的一个。不然可能会内存泄露。
	message.success('结果返回给web')
	message.fail('错误返回给web')
}

WEB拦截

<input type="file" />如果在混合中使用它,会自动调用宿主应用的选择器。它是按照w3c规范,可以使用相机或者相册 得到媒体文件,也可以选择仅相机或者仅相册获取媒体文件。已经被x-webview-u组件拦截替换为系统自带的选择器。

其它拦截:

拨号 tel://协议

发送邮件 mailto://协议

sms发短信 sms://协议

应用schem唤起 应用://协议 (如微信小程序拉起 weixin://dl/business/?appid=你的appid

其它权限控制见x-webview-u组件。

最近更新