Jak korzystać z Webview w React Native? | Wirescript (2024)

Webview to wbudowana przeglądarka, której można używać do wyświetlania stron internetowych w aplikacjach React Native. Może wyświetlać wszystko, od niestandardowych elementów HTML po całe aplikacje internetowe w React Native.

W React Native możemy korzystać z Webview za pomocą pakietu innej firmy o nazwie,Reaguj-natywna-webview. To jest oficjalna implementacja przeglądarki internetowej po jej usunięciu z programuReaguj natywny rdzeńaby rdzeń był jak najbardziej chudy.

W tym poście zamierzamy zaimplementować prosty projekt, aby zobaczyć, jak pracować z Webview na React Native i jakie są niektóre z dobrych przypadków użycia, które obsługuje.

Utwórz projekt React Native

Aby rozpocząć, musimy rozpocząć nowy projekt z React Native CLI. Możesz to zrobić z expo, jeśli nie chcesz przechodzić przez żmudny proces instalacji.

npx react-native init Experimenting WithWebview

Z Expo:

Jeśli korzystasz z Expo, możesz od razu przejść doImplementacja podstawowego WebViewpo tym.

instalacja expo reaguje-rodzinny-widok internetowy

Dodaj zależności

// Dlanp użytkownicynp zainstalowaćReaguj-natywna-webview
// Jeśli używaszprzędzaprzędza dodaćReaguj-natywna-webview

Łącz natywne zależności

Będziesz tego potrzebować tylko wtedy, gdy nie używasz Expo i używasz React Native CLI do rozpoczęcia projektu.

Jeśli używaszreaguj natywnie≥ 0.60 automatyczne łączenie zajmie się tym krokiem, więc możesz pominąć, ale nie zapomnij uruchomićinstalacja pod

reaguj natywniepołączyćReaguj-natywna-webview

Jeśli kiedykolwiek odinstalujesz ten pakiet,

reaguj-natywna odłącz reaguj-natywna-webview

Na iOS i macOS

Jeśli używasz kakaopodów, wios/LubSystem operacyjny Mac/prowadzenie katalogu,

strąkzainstalować

Dla Android

Jeśli używasz react-native-webview < 6: Możesz pominąć

Jeśli używasz React-native-Webview ≥ 6.x.x

Upewnij się, że AndroidX jest włączony w twoim projekcie, edytującandroid/gradle.properties

android.useAndroidX=trueandroid.enableJetifier=true

Są szanse, że jest to już zrobione automatycznie przez React Native CLI.

Implementacja podstawowego WebView

Nadszedł czas, aby pozbyć się kodu kotłowego w środkuaplikacja.jsi napisz nasz kod dla webview.

// Aplikacja.jsimportReagowaćz "reagować";import {Bezpieczny widok obszaru,Pasek stanu} z „reaguj natywnie”;import {WebView} z „React-native-webview”;konst Aplikacja = () => { powrót ( <> <Pasek stanu barStyl="ciemna zawartość" /> <Bezpieczny widok obszaru styl={{przewód: 1 }}> <WebView źródło={{ur: „https://medium.com/” }} /> Bezpieczny widok obszaru> > );};eksport domyślnyAplikacja;

To wszystko, co musisz zrobić, aby wyświetlić stronę internetową w swojej aplikacji.

How to use Webview in React Native? | The Wirescript (1)

źródłoBiała listarekwizyt

To jest lista ciągów pochodzenia, po których możesz nawigować w komponencie webview. Zajmuje tablicę ciągów znaków. Domyślnie jego wartości to,http://Ihttps://. Jeśli użytkownik przejdzie do nowej strony, której źródła nie znajdują się na białej liście, adres URL będzie obsługiwany przez system operacyjny.

<WebView źródło={{ur: „https://www.educative.io/” }} źródłoBiała lista={["https://*", "git://*"]}/>

Ładowanie lokalnych/wbudowanych plików HTML

Możesz także ładować lokalne lub wbudowane pliki HTML do Webview i w ten sposób możesz to osiągnąć.

konstźródłoHtml= wymagać("./źródło/index.html"); // twój plik html tutajeksport konst Aplikacja = () => <WebView źródło={{HTML:źródłoHtml}} />;

Lub dodaj wbudowany kod HTML.

eksport konst Aplikacja = () => { konsthtmlŹródło= 

Witaj świecie 🌍

; powrót ( <Bezpieczny widok obszaru styl={{przewód: 1 }}> <WebView źródło={{HTML:htmlŹródło}} /> Bezpieczny widok obszaru> );};

How to use Webview in React Native? | The Wirescript (2)

Wstrzykiwanie niestandardowego javascript do przeglądarki internetowej

Możesz także dodać własny skrypt javascript, który można uruchomić w przeglądarce internetowej. Możesz go użyć do manipulowania zachowaniem ładowanej witryny zgodnie z własnymi potrzebami.

Można to zrobić na dwa sposoby:

  1. wstrzyknięty JavaScriptrekwizyt
  2. wstrzykiwać JavaScriptmetoda

Ich nazwy mogą być mylące, więc należy je zrozumieć na podstawie ich celu, będzie to dla ciebie jasne na kilku przykładach.

wstrzyknięty JavaScriptrekwizyt

To jest rekwizyt do komponentu Webview, który zawiera skrypty uruchamiane po pierwszym załadowaniu strony internetowej. Działa tylko raz, nawet jeśli strona internetowa zostanie ponownie załadowana lub opuszczona.

Na przykład

importReagowaćz "reagować";import {Pogląd} z „reaguj natywnie”;import {WebView} z „React-native-webview”;konst Aplikacja = () => { konstskrypty= `document.body.style.backgroundColor = 'gorący róż'; document.querySelector("h1").style.color = 'niebieski'; document.querySelector("p").style.padding = '20px'; PRAWDA;`; powrót ( <Pogląd styl={{przewód: 1 }}> <WebView źródło={{ur: „https://www.example.com/” }} wstrzyknięty JavaScript={skrypty} /> Pogląd> );};eksport domyślnyAplikacja;

How to use Webview in React Native? | The Wirescript (3)

wstrzykiwać JavaScriptmetoda

Jak wiemy powyższewstrzyknięty JavaScriptprop, o którym mówiliśmy, działa tylko przy pierwszym ładowaniu i nie ma innego sposobu, jeśli chcemy uruchamiać skrypty wielokrotnie lub nawigować po stronie. Dlatego Webview ujawnia tę metodęwstrzykiwać JavaScriptna jego referencję.

Przykład

importReagowaćz "reagować";import {Pogląd} z „reaguj natywnie”;import {WebView} z „React-native-webview”;konst pobierz losowy kolor = () => { pozwalaćlisty= "0123456789ABCDEF"; pozwalaćkolor= "#"; Do (pozwalaćI= 0;I< 6;I++) {kolor+=listy[Matematyka.podłoga(Matematyka.losowy() * 16)]; } powrótkolor;};klasa Aplikacja rozciąga się Reagować.Część { renderowanie() { konst skrypty = () => { konstkolor= pobierz losowy kolor(); powrót `document.body.style.backgroundColor = '${kolor}'; document.body.style.color = '${kolor}'; document.body.querySelector("a").style.color = '${kolor}'; PRAWDA;`; }; ustaw Interwał(() => { Ten.webref.wstrzykiwaćJavaScript(skrypty()); }, 500); powrót ( <Pogląd styl={{przewód: 1 }}> <WebView ref={R => (Ten.webref=R)} źródło={{ur: „https://www.example.com” }} /> Pogląd> ); }}eksport domyślnyAplikacja;

How to use Webview in React Native? | The Wirescript (4)

Chociaż wszystkie te sposoby mogą pomóc w manipulowaniu przeglądarką internetową zgodnie z własnymi potrzebami, jeszcze jednym wymaganiem może być wysyłanie lub odbieranie danych ze strony internetowej w WebView. Teraz omówimy, jak możesz komunikować się między swoim JS a aplikacją React Native.

Komunikacja między JS a React Native

Wymaga to użycia dwóch rzeczy:

  1. window.ReactNativeWebView.postMessagefunkcjonować
  2. w wiadomościrekwizyt

Thewindow.ReactNativeWebView.postMessageto funkcja, która jest narażona na wstrzyknięte skrypty wewnątrz WebView. Zasadniczo możesz przekazać do niego wszystko, pod warunkiem, że są one odpowiednio serializowane. Będzie to jasne w poniższym przykładzie.

Odpoczywaj osobno, co*kolwiek mijasz w środkuWyślij wiadomośćmożna uzyskać dostęp w React Native poprzez przekazane wywołanie zwrotnew wiadomościrekwizyt.w wiadomościjest rekwizytem dla Webview, który przyjmuje wywołanie zwrotne i jest wyzwalany za każdym razem, gdy wiadomość jest wysyłana za pomocąWyślij wiadomość.

Przykład

importReagowaćz "reagować";import {Pogląd} z „reaguj natywnie”;import {WebView} z „React-native-webview”;konst pobierz losowy kolor = () => { pozwalaćlisty= "0123456789ABCDEF"; pozwalaćkolor= "#"; Do (pozwalaćI= 0;I< 6;I++) {kolor+=listy[Matematyka.podłoga(Matematyka.losowy() * 16)]; } powrótkolor;};klasa Aplikacja rozciąga się Reagować.Część { renderowanie() { konst skrypty = () => { konstkolor= pobierz losowy kolor(); powrót `document.body.style.backgroundColor = '${kolor}'; document.querySelector("h1").style.color = 'gorący róż'; window.ReactNativeWebView.postMessage(document.body.style.backgroundColor); PRAWDA;`; }; ustaw Interwał(() => { Ten.webref.wstrzykiwaćJavaScript(skrypty()); }, 500); powrót ( <Pogląd styl={{przewód: 1 }}> <WebView ref={R => (Ten.webref=R)} źródło={{ur: „https://www.example.com” }} w wiadomości={wydarzenie =>konsola.dziennik(wydarzenie.natywneZdarzenie.dane)} /> Pogląd> ); }}eksport domyślnyAplikacja;

To po prostu rejestruje kolor tła strony internetowej za każdym razem, gdy zostanie zmieniony. Jak widać, przekazujemy wywołanie zwrotne do środkaw wiadomościprop, który jest uruchamianyWyślij wiadomość.

How to use Webview in React Native? | The Wirescript (5)

Rzeczywisty obiekt zdarzenia, który jest przekazywany do środkaw wiadomościoddzwonienie to jest to[nativeEvent.data](http://nativeevent.data)to argument, który przekazaliśmy w środkuwindow.ReactNativeWebView.postMessage.

{„wydarzenie natywne”: {„canGoBack”: FAŁSZ,„Może iść do przodu”: FAŁSZ,"dane": "rgb(247, 75, 142)","Ładowanie": FAŁSZ,"cel": 15,"tytuł": „Przykładowa domena”,„URL”: „https://www.example.com/” }}

Obsługa zmian stanu nawigacji

Teraz omówimy, w jaki sposób można przechwycić, ilekroć użytkownik przechodzi w przeglądarce internetowej do innej strony internetowej lub klika dowolny link. Możesz nawiązać połączenie zwrotne, które nastąpi za każdym razem, gdy zmieni się trasa.

onNavigationStateChangerekwizyt

Wymaga to wywołania zwrotnego, które jest wyzwalane za każdym razem, gdy użytkownik porusza się w widoku internetowym. Przekazuje bieżący stan nawigacji jako argument, do którego można uzyskać dostęp w wywołaniu zwrotnym.

Przykład

importReagowaćz "reagować";import {Pogląd} z „reaguj natywnie”;import {WebView} z „React-native-webview”;klasa Aplikacja rozciąga się Reagować.Część { handleNavigationStateChanged = navState => { konst {adres URL,tytuł} =navState;konsola.dziennik({adres URL,tytuł}); }; renderowanie() { powrót ( <Pogląd styl={{przewód: 1 }}> <WebView ref={R => (Ten.webref=R)} źródło={{ur: „https://www.example.com” }} onNavigationStateChange={Ten.handleNavigationStateChanged} /> Pogląd> ); }}eksport domyślnyAplikacja;

PodstawowynavStateprzekazywana struktura parametrówhandleNavigationStateChanged:

{„canGoBack”: FAŁSZ,„Może iść do przodu”: FAŁSZ,"Ładowanie": FAŁSZ,"cel": 3,"tytuł": „Przykładowa domena”,„URL”: „https://www.example.com/”}

How to use Webview in React Native? | The Wirescript (6)

Podobnie jak fajny projekt, możesz bawić się WebView i korzystać z wielu dostępnych metod, takich jakidź naprzódIWróć,stopŁadowanie(lub nawet dodaćobsługa Apple Pay), aby odwzorować działanie podobne do przeglądarki dla użytkowników, tak jak mywstrzykiwać JavaScriptmetoda powyżej.

Bibliografia

Możesz odwołać się do React Native WebViewdokumentymieć przegląd wszystkiego, co oferuje lubstrona z referencjamiaby zapoznać się ze wszystkimi dostępnymi rekwizytami i metodami. Jeśli nie masz ochoty na powyższy projekt, możesz to przejrzećporadnik blogowyjeśli kiedykolwiek utkniesz.

Jak korzystać z Webview w React Native? | Wirescript (2024)

FAQs

Can I use WebView in React Native? ›

While the built-in web view has a lot of features, it is not possible to handle every use-case in React Native. You can, however, extend the web view with native code without forking React Native or duplicating all the existing web view code.

Can we get response from WebView in React Native? ›

Now, we are going to allow the WebView page to send a response back to the React Native app. This is particularly useful if your React Native application has to deal with certain logic where your website or webpage has to send data to your React Native app.

What is the difference between WebView and React Native WebView? ›

In React-Native, you write Javascript. The Javascript communicates with native components (Java on Android, Objective C on iOS, C# on Windows). Whereas WebView is simply a way to show a webpage in an app.

How do I console a WebView in React Native? ›

Steps:
  1. Mark the WebView as being "inspectable" using the webviewDebuggingEnabled prop.
  2. Open Safari Preferences -> "Advanced" tab -> enable checkbox "Show Develop menu in menu bar"
  3. Start app with React Native WebView in iOS simulator or iOS device.
  4. Safari -> Develop -> [device name] -> [app name] -> [url - title]

What is the difference between Webview and native apps? ›

They get their information from a website rather than from the original surroundings. A webview app does not provide the same seamless experience as a native app because users effectively access a web page. Native apps are also significantly faster because they take advantage of the device's processing capability.

What is the difference between native and Webview? ›

If we remove the engine part from the browser, we basically get a webview. When this engine is placed in a native app, we get a webview app. Basically, any app that loads content from a web page is a webview app. Use a mobile app builder for iOS and Android.

How do you communicate between WebView and native Android? ›

2.1 To receive data from webview ,we can create an interface, which will enable webview to connect the native layer and pass data. From native layer, create a class and replicate the following. While configuring web view, we need to set JavaScript interface as above JSBridge class.

How do I make my screen responsive in React Native? ›

Here are different ways that you can use to make you React Native App Responsive:
  1. Utilize Flexbox. Flexbox is a powerful layout mechanism that can be used to create a responsive UI. ...
  2. Create Responsive Components. ...
  3. Avoid Hardcoded Values. ...
  4. Use Relative Sizing.
Jan 24, 2023

How can I send a message from the WebView to React Native? ›

You need to use ReactNativeWebView. postMessage(...); function in your JavaScript code running inside the WebView in order to send the messages to React Native code. ReactNativeWebView. postMessage supports the only string parameter which should be your serialized message.

Why not to use WebView? ›

Cons of web views

Can feel laggy to use. Web views might not work consistently on different versions of Android and / or iOS — e.g., problems with the html used for camera integration on Android. Often you actually need three different branches in the web code, i.e., if iOS (...) else if android (...) else (...)

Is WebView a good idea? ›

What Are the Benefits of Webview Apps? Webview apps or hybrid apps are almost always faster and cheaper to build. They also require less work to manage, and make it easier to recreate the UX of your web app or website, while still providing a mobile-friendly app experience.

Why use react-native WebView? ›

React Native WebView is a component which is used to load web content or web page. The WebView component is imports form core react-native library. Now, the WebView is replaced from the built-in core react-native, and placed in react-native-webview library.

How does WebView work in React Native? ›

A WebView is an embedded browser that can be used to display web pages inside your React Native applications. It can display anything (from custom HTML elements to entire web applications) inside React Native. In React Native, we can use WebView by using a third-party package called react-native-webview.

How do I navigate between two screens in React Native? ›

React Navigation​
  1. If you have an Expo managed project, install the dependencies with expo : npx expo install react-native-screens react-native-safe-area-context.
  2. If you have a bare React Native project, install the dependencies with npm : npm install react-native-screens react-native-safe-area-context.
Jun 21, 2023

How do I load HTML into React Native WebView? ›

Loading Inline HTML using React Native WebView
  1. import React, { Component } from 'react';
  2. import { WebView } from 'react-native-webview';
  3. class MyInlineWeb extends Component {
  4. render() {
  5. return (
  6. <WebView.
  7. originWhitelist={['*']}
  8. source={{ html: '<h1>This is a static HTML source!</ h1>' }}
Mar 13, 2022

How do I open WebView in React Native app? ›

React Native WebView
  1. React Native WebView. In this post, you will see how to Open any Website in React Native WebView. ...
  2. To Import WebView in Code. import { WebView} from 'react-native-webview'
  3. Render Using. ...
  4. To Make a React Native App. ...
  5. Installation of Dependency. ...
  6. CocoaPods Installation. ...
  7. Code. ...
  8. To Run the React Native App.

Can I use Web components in React Native? ›

Html components are wrapped in a WebView, with properties and redux actions automatically copied between native and html components.

Is it possible to use CSS in React Native? ›

In addition to being able to use CSS syntax to make writing your styles easier, it is also possible to use the SCSS to maintain consistent styles across your entire React Native application.

Are WebView apps allowed? ›

Webviews and Affiliate Spam

We don't allow apps whose primary purpose is to drive affiliate traffic to a website or provide a webview of a website without permission from the website owner or administrator.

References

Top Articles
Latest Posts
Article information

Author: Reed Wilderman

Last Updated:

Views: 5623

Rating: 4.1 / 5 (72 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Reed Wilderman

Birthday: 1992-06-14

Address: 998 Estell Village, Lake Oscarberg, SD 48713-6877

Phone: +21813267449721

Job: Technology Engineer

Hobby: Swimming, Do it yourself, Beekeeping, Lapidary, Cosplaying, Hiking, Graffiti

Introduction: My name is Reed Wilderman, I am a faithful, bright, lucky, adventurous, lively, rich, vast person who loves writing and wants to share my knowledge and understanding with you.