app提供方法js如何调用:
```
/**
* 检查ios是否提供handName方法 | 并执行
* @param handName string 调用的方法名称
* @param message string 发送的内容
* 目前了解到的ios不提供return,如需获取app返回信息需提供给app一个回调函数
* 还有另一种方式 window.prompt('getToken', '') 需app提供这种调用方式
*/
function HandIos(handName: string, message?: string) {
if (windows.webkit
&& windows.webkit.messageHandlers !== undefined
&& windows.webkit.messageHandlers[handName] !== undefined) {
if (message === undefined) {
windows.webkit.messageHandlers[handName].postMessage('');
} else {
windows.webkit.messageHandlers[handName].postMessage(message);
}
}
}
/**
* 检查Android是否提供handName方法 | 并执行
* @param handName string 调用的方法名称
* @param message string 发送的内容
* @return any
*/
function HandAndroid(handName: string, message?: string): any {
if (windows.android !== undefined && windows.android[handName] !== undefined) {
if (message === undefined) {
return windows.android[handName]();
} else {
return windows.android[handName](message);
}
}
return false;
}
```
#
### 上面说到ios没有return处理方式
```
let token: string = '';
export async function setToken(): Promise<void> {
if (Ios && token === '') {
setTimeout(() => {
(window as any).setToken = (msg: string) => { // js 给app提供setToken 方法回调
token = msg;
}
// 执行app 提供的 HandIos('getToken') 方法
}, 10)
await sleep(500); // 延迟执行
}
}
```
await sleep(500); // 延迟执行 [查看](https://www.kancloud.cn/book/yejunhong/webapp/preview/js-%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95.md)
#
### js提供方式给app使用
```
window.setToken = (msg: string) => { // js 给app提供setToken 方法回调
console.log(msg);
}
window.testString= (msg: string) => { // js 给app提供setToken 方法回调
console.log(msg);
}
```