? ? ? ?最近兩個月一直在研究Flutter項目思瘟,目的是為了開發(fā)一款Flutter應用去替換之前的Android和IOS應用荸百。
? ? ? ?一開始都有條不紊地進行著,直到遇到一個坑滨攻,原先的項目使用了大量的H5够话,利用android和IOS中的Webview去加載這些鏈接,其中就避免不了JS的交互光绕,我知道android和IOS都支持addJavascriptInterface的方法去暴露一個對象給JS女嘲,這樣JS就可以直接調(diào)用原生的一些方法。
Android實現(xiàn)方法:webview.addJavascriptInterface(new JSInterface(), "nativeApis");
IOS實現(xiàn)方法:JSInterface* interface = [JSInterface new];
? ? ? ? ? ? ? ? ? ? ? ?[self.myWebView addJavascriptInterfaces:interface WithName:@"nativeApis"];
這樣JS代碼就可以直接使用nativeApis.getXXX()去調(diào)用原生方法诞帐。
為了不去修改那些H5項目欣尼,在Flutter項目中,我也必須實現(xiàn)類似方法停蕉,但Flutter的webview并不支持類似機制愕鼓,要想調(diào)用Flutter的方法,就必須修改js的調(diào)用方法谷徙,將nativeApis.getXXX()改成getXXX.postMessage(),所以想在這里問問大家拒啰,有沒有什么辦法可以解決我的問題?
----------------------------------------------------時間線-----------------------------------------------------
? ?經(jīng)過了一段時間的摸索完慧,倒是想到一個方法谋旦,利用platformview去創(chuàng)建android和ios的webview剩失,然后用UiKitView或者AndroidView在Flutter項目中使用,需要注意的是册着,ios的WKWebView需要重寫拴孤,因為他并不直接支持addJavascriptInterfaces這個方法,我用的是github上的開源項目EasyJSWebView甲捏,接下來演熟,我要考慮如何在android和ios中調(diào)用flutter的方法,MethodChannel剛好可以實現(xiàn)這個功能司顿。
https://blog.csdn.net/mhtios/article/details/98608694#commentsedit
https://github.com/dukeland/EasyJSWebViewSample
? ? 這個思路可以完成上述的需求芒粹,但過程比較復雜,如果有更好的辦法大溜,希望大家可以在下方評論化漆。