"/XXX_APP" --> XXX APP
iOS User-Agent 加後綴
fileprivate func setNavigatorUserAgent() {
// 由native的webview在user agent加上特定字串,方便web辨別是否為mRich app
self.tempWebView.evaluateJavaScript("navigator.userAgent") { [weak self] (result, error) in
if let userAgent = result as? String {
self?.webView.customUserAgent = userAgent + "/ON_MRICH_APP"
}
}
}
android User-Agent 加後綴
class WebViewSettings {
companion object SETTING {
fun initWebView(context : Activity? , webview : WebView?) {
// 加mobile物件
webview?.addJavascriptInterface(WebAppInterface(context), "mobile")
// User-Agent 加後綴
val webSettings = webview?.getSettings()
val userAgentStr = webSettings?.getUserAgentString()
webSettings?.setUserAgentString(userAgentStr + "/ON_MRICH_APP")
...
}
}
}
{
tag:'XXXXX',
uuid: '20d8e5fe-d9bc-11e9-8a34-2a2ae2dbcce4',
requestData:{...} or {}
}
以上JSON物件會轉成JSONSTRING => message,使用postMessage呼叫Native
window.webkit.messageHandlers.mobile.postMessage(message);
extension ViewController: WKScriptMessageHandler {
func userContentController(
_userContentController: WKUserContentController,
didReceive message: WKScriptMessage
){
let name = message.name
if name == "mobile" {
...
}
}
}
window.mobile.postMessage(message);
@JavascriptInterface
fun postMessage(param : String) : String? {
…
}
{
tag: 'XXXX'
uuid: '0d8e5fe-d9bc-11e9-8a34-2a2ae2dbcce4'(與request帶的uuid相同)
returnCode: '...'
returnMsg: 'xxx'
returnData: {...} or {}
}
以上JSON物件要轉成JSONSTRING => message
Native要執行FrontEnd的JS callback Method
window.executeAsync(message)