之前用UIWebView的時候,非常的爽,用JSContext這個類就可以做想做的事,現(xiàn)在要改成WKWebView就比較的坑爹了(這是為什么博主要換控件的原因),因為博主需要在頁面文件加載之前就把參數(shù)給到web端(js調(diào)用有返回值oc方法)。把WKWebView的所以代理方法都看了一遍,發(fā)現(xiàn)只有下面方式能與js交互:
window.webkit.messageHandlers.<name>.postMessage();
但是這個是沒有返回值的,于是博主又想到了。如果讓web端用這個方法來通知博主這邊,再通過博主這邊調(diào)用web端,這樣好像是可以的,但遺憾的是web端通知了博主以后,是不會停止運行的,還是會走下去的,所以當博主再調(diào)用web端傳參數(shù)時,這是沒有意義了。后來博主又想到,是不是可以讓web端通知博主后阻塞,然后當博主傳完參數(shù)再執(zhí)行下去,最后web端童鞋說很麻煩,就沒有動了。想了好長一段時間,才想到是不是可以在web端頁面加載前,博主就把參數(shù)傳到瀏覽器的一個地方,然后web端去瀏覽器的那個地方取就行了。于是有了下面的寫法:

要注意的地方是injectionTime,別弄錯了

WeakScriptMessageDelegate.h文件

WeakScriptMessageDelegate.m文件
localStorage這個是網(wǎng)頁的本地存儲(H5的新東西),相當于iOS的NSUserDefaults,不過大小一般只有5M,這個與瀏覽器有關(guān)。accessToken這個是與web端約定參數(shù)key,當然你也可以像下面這樣寫:
localStorage["accessToken"] = "74851c23358c";
localStorage.accessToken ="74851c23358c";
博主的寫法是官方推薦的,反正官方說的,就按照官方的寫咯。想了解更多的localStorage的知識,點這里。
PS:如果大家有更好的方法,可以在評論里寫出來,或者私信博主,想要demo的點這里。