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); } ```