OC中WKWebView與js的交互

之前用UIWebView的時(shí)候,非常的爽,用JSContext這個(gè)類就可以做想做的事,現(xiàn)在要改成WKWebView就比較的坑爹了(這是為什么博主要換控件的原因),因?yàn)椴┲餍枰陧撁嫖募虞d之前就把參數(shù)給到web端(js調(diào)用有返回值oc方法)。把WKWebView的所以代理方法都看了一遍,發(fā)現(xiàn)只有下面方式能與js交互:

window.webkit.messageHandlers.<name>.postMessage();

但是這個(gè)是沒有返回值的,于是博主又想到了。如果讓web端用這個(gè)方法來通知博主這邊,再通過博主這邊調(diào)用web端,這樣好像是可以的,但遺憾的是web端通知了博主以后,是不會停止運(yùn)行的,還是會走下去的,所以當(dāng)博主再調(diào)用web端傳參數(shù)時(shí),這是沒有意義了。后來博主又想到,是不是可以讓web端通知博主后阻塞,然后當(dāng)博主傳完參數(shù)再執(zhí)行下去,最后web端童鞋說很麻煩,就沒有動了。想了好長一段時(shí)間,才想到是不是可以在web端頁面加載前,博主就把參數(shù)傳到瀏覽器的一個(gè)地方,然后web端去瀏覽器的那個(gè)地方取就行了。于是有了下面的寫法:

要注意的地方是injectionTime,別弄錯(cuò)了
WeakScriptMessageDelegate.h文件
WeakScriptMessageDelegate.m文件

localStorage這個(gè)是網(wǎng)頁的本地存儲(H5的新東西),相當(dāng)于iOS的NSUserDefaults,不過大小一般只有5M,這個(gè)與瀏覽器有關(guān)。accessToken這個(gè)是與web端約定參數(shù)key,當(dāng)然你也可以像下面這樣寫:

localStorage["accessToken"] = "74851c23358c";
localStorage.accessToken ="74851c23358c";

博主的寫法是官方推薦的,反正官方說的,就按照官方的寫咯。想了解更多的localStorage的知識,點(diǎn)這里

PS:如果大家有更好的方法,可以在評論里寫出來,或者私信博主,想要demo的點(diǎn)這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容