深入淺析React Native與web的基本互動(附程式碼)
之前的文章《》中,給大家介紹怎麼使用css3給圖片新增漸變效果。下面本篇文章給大家介紹一下React Native與web的基本互動,有一定的參考價值,有需要的朋友可以參考一下。
React Native和H5互動
//接收來自H5的訊息 onMessage = (e) => { Log("WebView onMessage 收到H5引數:", e.nativeEvent.data); let params = e.nativeEvent.data; params = JSON.parse(params); Log("WebView onMessage 收到H5引數 json後:", params); }; onLoadEnd = (e) => { Log("WebView onLoadEnd e:", e.nativeEvent); let data = { source: "from rn", }; this.web && this.web.postMessage(JSON.stringify(data)); //傳送訊息到H5 }; <WebView ref={(webview) => { this.web = webview; }} style={{ width: "100%", height: "100%", justifyContent: "center", alignItems: "center", }} source={require("../data/testwebview.html")} onLoadEnd={this.onLoadEnd} //載入成功或者失敗都會回撥 onMessage={(e) => this.onMessage(e)} javaScriptEnabled={true} //指定WebView中是否啟用JavaScript startInLoadingState={true} //強制WebView在第一次載入時先顯示loading檢視 renderError={(e) => { return <View />; }} />;
H5和React Native互動
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>text webview</title> <script type="application/javascript"> //相互通訊只能傳遞字串型別 function test() { //傳送訊息到rn let params = { msg: "h5 to rn", source: "H5", }; window.postMessage(JSON.stringify(params)); //傳送訊息到rn } window.document.addEventListener("message", function (e) { //註冊事件 接收資料 const message = e.data; //字串型別 console.log("WebView message:", message); window.postMessage(message); }); </script> </head> <body> <h1>chuchur</h1> <button onclick="test()">單擊</button> </body> </html>
注意事項
假如你的WebView
是從react-native
裡引用的話。H5
向RN
發訊息則使用window.postMessage(message)
為了減少React Native
的表面積,將從React Native
核心中刪除,推薦使用
import { WebView } from "react-native"; //會被移除 //to import { WebView } from "react-native-webview";
假如是用react-native-webview
引入則通訊方式使用window.ReactNativeWebView.postMessage(message)
有關更多資訊,請閱讀地址https://github.com/react-native-community/discussions-and-proposals/issues/6提案。
原生呼叫 H5 方法
[wkWebView evaluateJavaScript:@"js方法名()" completionHandler:^(id _Nullable response, NSError * _Nullable error) { if (!error) { // 成功 NSLog(@"%@",response); } else { // 失敗 NSLog(@"%@",error.localizedDescription); } }];
H5 呼叫原生方法
//App端: // 1. WKWebView注入ScriptMessageHandler [wkWebView.configuration.userContentController addScriptMessageHandler:(id <WKScriptMessageHandler>)scriptMessageHandler name:@"xxx"]; // 2. 提供setWebViewAppearance方法,這樣就能反射出H5即將傳來的字串@"setWebViewAppearance" - (void)setWebViewAppearance { } //H5端: // 1. 獲取handler var handler = { callHander: function (json) { if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {//ios window.webkit.messageHandlers.xxx.postMessage(JSON.stringify(json)) } if (/(Android)/i.test(navigator.userAgent)) { //Android window.xxx.postMessage(JSON.stringify(json)); } } // 2. 設定呼叫App方法所需要的傳出的引數(這裡是json格式) function setAppAppearance(){ handler.callHander({ 'body':"setWebViewAppearance", 'buttons': [ { "text":"分享", "action":"" } ], 'title':"這是webView的標題" }); } // 3. H5呼叫自己的設定方法,繼而呼叫了原生客戶端的方法 setAppAppearance();
提示報錯:
WKJavaScriptExceptionMessage=ReferenceError: Can't find variable xxx 需要方法需要掛在 window 上 window.xxx = function() {} for vue, mounted: window.xxx =this.xxx
推薦學習:
以上就是深入淺析React Native與web的基本互動(附程式碼)的詳細內容,更多請關注php中文網其它相關文章!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/151/viewspace-2827453/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- React Native與Android通訊互動React NativeAndroid
- react程式碼拆分之react loadable原始碼淺析React原始碼
- 前端和React Native程式碼互轉總結前端React Native
- React Native 啟動流程簡析React Native
- React Native 互動元件之 SwitchReact Native元件
- React Native轉web方案:react-native-webReact NativeWeb
- Class與ClassLoader深入淺析
- react原始碼淺析(四):react-isReact原始碼
- react native 和原生平臺 android的互動React NativeAndroid
- react原始碼淺析(三):ReactChildrenReact原始碼
- react原始碼淺析(三):ReactElementValidatorReact原始碼
- react原始碼淺析(三):ReactElementReact原始碼
- react-router 原始碼淺析React原始碼
- react-window 原始碼淺析React原始碼
- Flutter 與Native原生互動Flutter
- React Native startReactApplication 方法簡析React NativeAPP
- React-router4原始碼淺析React原始碼
- 【程式碼混淆】react-native 程式碼混淆React
- react native ScrollView巢狀WebView 互動問題React Native巢狀WebView
- 淺析 React FiberReact
- 基於React 原始碼深入淺出setState:深度刨析updater的結構和原理React原始碼
- 淺析mysql互動式連線&非互動式連線MySql
- React-router4(新版)原始碼淺析React原始碼
- 【Web前端Talk】React-loadable 進行程式碼分割的基本使用Web前端React行程
- 全網最全 Flutter 與 React Native 深入對比分析FlutterReact Native
- Web 動畫原則及技巧淺析Web動畫
- React Native 的未來與React HooksReact NativeHook
- 淺析“程式碼視覺化”視覺化
- 淺析方法控制程式碼
- 淺析Web components的痛點Web
- RecyclerView動畫原始碼淺析View動畫原始碼
- Webpack基本架構淺析Web架構
- react-loadable原理淺析React
- 深入淺析Nodejs的安裝方法與模組系統NodeJS
- 淺析 React / Vue 跨端渲染原理與實現ReactVue跨端
- 淺析 Node 程式與執行緒執行緒
- 淺析 SplitChunksPlugin 及程式碼分割的意義Plugin
- web與APP之間的互動—WebViewJavascriptBridgeAPPWebViewJavaScript