關(guān)于JS與WKWebView交互的兩個問題

WK的代碼請參照

https://www.cnblogs.com/someonelikeyou/p/6890587.html

現(xiàn)在說遇到的兩個問題:

一 ?JS調(diào)用WK

1:約定的方法名為?AppGoBack() 為網(wǎng)頁返回原生控制器。

2:JS代碼

window.webkit.messageHandlers.AppGoBack.postMessage()

3 WK代碼

[userContentController addScriptMessageHandler:delegateController? name:@"AppGoBack"];

4 協(xié)議監(jiān)聽方法

#pragma mark - WKScriptMessageHandler

- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message{

? ? NSLog(@"name:%@\\\\n body:%@\\\\n frameInfo:%@\\\\n",message.name,message.body,message.frameInfo);

? ? //返回

? ? if([message.nameisEqualToString:@"AppGoBack"]) {

? ? ? ? [self.navigationController popViewControllerAnimated:YES];

? ? }

}

按照往上的其他資料這樣寫是沒問題的,但是死活都沒法監(jiān)聽到,其實是 JS方面存在著問題:

window.webkit.messageHandlers.AppGoBack.postMessage()?

這個方法必須要傳參數(shù)才能被WK 解析到,改成

window.webkit.messageHandlers.AppGoBack.postMessage({

? ? ? ? 'method': 'AppGoBack' ? }

)

類似這樣帶參的就OK了。

二:WK調(diào)用JS ?

1 在需要調(diào)用的地方寫上

[webView evaluateJavaScript: method?completionHandler:^(id_Nullableresult,NSError*_Nullableerror) { ? ? ? ?NSLog(@"==%@----%@",result, error);

? ? }];

其中 method為JS 方法,需要注意的是當傳中文是參數(shù)的寫法,

不能直接傳中文,要加上 ' ' 引號才行,不然JS沒法接收 想這樣傳值

?NSString *cityStr = [NSString stringWithFormat:@"AppToWapAddAddressCookie('%@')",self.cString]; ??

?[webView evaluateJavaScript:cityStr completionHandler:^(id_Nullable result,NSError*_Nullable error) { ? ? ? ?NSLog(@"==%@----%@",result, error);

? ? }];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容