解決react-native-webview使用postMessage后H5不能監(jiān)聽問題

蘋果不接收含UIWebView的ipa上架后,很多APP都在升級WebView組件,最好的方法就是使用react-native-webview這個庫。近期我們公司的APP也對WebView進行了升級,但在升級過程中發(fā)現(xiàn)了一個問題。RN層使用postMessage發(fā)送的消息,H5上監(jiān)聽不到。經(jīng)過多次嘗試和查看源碼后發(fā)現(xiàn)了問題所在。
之前直接使用RN自帶的WebView組件時寫法是這樣的:

// RN發(fā)送消息代碼
this.webView.postMessage(xxxxx)
// H5監(jiān)聽接收代碼
document.addEventListener(xxxxx)

更換為react-native-webview的WebView組件后,相同的代碼,H5就不能接收到消息了。
查看react-native-webview/ios/RNCWebView.m源碼發(fā)現(xiàn)了問題:

-(void)postMessage:(NSString *)message
{
  NSDictionary *eventInitDict = @{@"data": message};
  NSString *source = [NSString
    stringWithFormat:@"window.dispatchEvent(new MessageEvent('message', %@));",
    RCTJSONStringify(eventInitDict, NULL)
  ];
  [self injectJavaScript: source];
}

這里使用的是window.dispatchEvent,所以document.addEventListener是接收到的,要使用window.addEventListener來監(jiān)聽。
解決方案:
1、修改H5監(jiān)聽代碼,如果新老版本都在使用時,就兩個監(jiān)聽都加上。

document.addEventListener(xxxxx)
window.addEventListener(xxxxx)

2、不想修改H5代碼時,可以考慮修改react-native-webview/ios/RNCWebView.m源碼,window.dispatchEvent改為document.dispatchEvent,這種修改成本較小,但是以后升級react-native-webview時容易留坑,大家根據(jù)自己實際情況選擇解決方案。

?著作權(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)容