React Native Webview と Web プロジェクト間の通信を処理する方法
11912 ワード
やあ!これが、React Native Webview と Web Project の間の通信を処理する方法です.より良い解決策の提案をお待ちしています. ✌️
注: 目的はチュートリアル記事ではありません.私が好む方法を共有し、より良い意見を得るためにフィードバックを得るだけです.間違いをお詫びします.
Webview を含む React コンポーネントをコーディングすることから始めましょう.
1)これは、Webviewコンポーネントと戻るボタンを持つ単純なコンポーネントです
2) React Native Webview から Web プロジェクトにメッセージを送信します.
私たちのケースは次のとおりです.
戻るボタンがクリックされたときに、Web プロジェクトにメッセージを送信します.
3) Web プロジェクトでメッセージを処理する時が来ました
ここで、React Native プロジェクトは脇に置いておきます.そして、Web プロジェクトでコードを記述します.
4) メッセージの送信元を確認できます.
処理中にメッセージの発信元を確認した方がよい場合があります.そうでない場合、場合によっては問題が発生する可能性があります.たとえば、メッセージがサード パーティのライブラリから受信されている場合、メッセージが競合します.
読んでくれてありがとう :)
私のgithubプロファイル:
https://github.com/inancakduvan
私のツイッターアカウント:
注: 目的はチュートリアル記事ではありません.私が好む方法を共有し、より良い意見を得るためにフィードバックを得るだけです.間違いをお詫びします.
Webview を含む React コンポーネントをコーディングすることから始めましょう.
1)これは、Webviewコンポーネントと戻るボタンを持つ単純なコンポーネントです
export default function App() {
return (
<div className="container">
<div className="backButton">Back</div>
<WebView
source={{ uri: 'https://your-web-project.com' }}
/>
</div>
);
}
2) React Native Webview から Web プロジェクトにメッセージを送信します.
私たちのケースは次のとおりです.
戻るボタンがクリックされたときに、Web プロジェクトにメッセージを送信します.
export default function App() {
const [webviewRef, setWebviewRef] = useState(null);
// on back button click, send message with postMessage
const handleBackButton = () => {
webviewRef.postMessage("goBack");
}
return (
<div className="container">
<div
className="backButton"
onClick={() => handleBackButton()}
>Back</div>
// We might also send a message when webview loaded.
<WebView
ref={ref => setWebviewRef(ref)}
source={{ uri: 'https://your-web-project.com' }}
onLoadEnd={() => webviewRef.postMessage("webviewLoaded")}
/>
</div>
);
}
3) Web プロジェクトでメッセージを処理する時が来ました
ここで、React Native プロジェクトは脇に置いておきます.そして、Web プロジェクトでコードを記述します.
// Listen messages received
document.addEventListener("message", (event) => {
const message = event.data;
handleMessages(message);
})
// Handle messages
function handleMessages(message) {
const messageCallbacks = {
"goBack": handleGoBackMessage,
"webviewLoaded": handleWebviewLoadedMessage
}
messageCallbacks[message]();
}
// Handle go back message
function handleGoBackMessage() {
window.history.back();
}
// Handle webview loaded message
function handleWebviewLoadedMessage() {
const body = document.querySelector("BODY");
body.setAttribute("data-environment", "webview");
}
エクストラパート
4) メッセージの送信元を確認できます.
処理中にメッセージの発信元を確認した方がよい場合があります.そうでない場合、場合によっては問題が発生する可能性があります.たとえば、メッセージがサード パーティのライブラリから受信されている場合、メッセージが競合します.
// Listen messages received
document.addEventListener("message", (event) => {
const origin = event.origin;
const message = event.data;
if(origin === "https://your-web-project.com") {
handleMessages(message);
}
})
// Handle messages
function handleMessages(message) {
const messageCallbacks = {
"goBack": handleGoBackMessage,
"webviewLoaded": handleWebviewLoadedMessage
}
messageCallbacks[message]();
}
// Handle go back message
function handleGoBackMessage() {
window.history.back();
}
// Handle webview loaded message
function handleWebviewLoadedMessage() {
const body = document.querySelector("BODY");
body.setAttribute("data-environment", "webview");
}
読んでくれてありがとう :)
私のgithubプロファイル:
https://github.com/inancakduvan
私のツイッターアカウント:
Reference
この問題について(React Native Webview と Web プロジェクト間の通信を処理する方法), 我々は、より多くの情報をここで見つけました https://dev.to/inancakduvan/how-i-handle-communication-between-react-native-webview-and-web-project-3lhpテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol