Questa pagina è stata tradotta automaticamente e può contenere errori. Leggi l'originale in inglese

API

WebView

nsh esporta WebView: una pagina web mostrata dal motore browser nativo della piattaforma (WKWebView su iOS e Mac Catalyst, android.webkit.WebView su Android). È una vista nativa con layout come qualsiasi altra, quindi scorre, applica il clipping e si sovrappone correttamente alle altre viste.

import { WebView, type WebViewNavigation, type WebViewProps } from "nsh";

Consulta Web view and video per la guida e <WebView> per le sue props.

#WebView

const WebView: (props: WebViewProps) => JSX.Element;

interface WebViewProps extends Omit<ViewProps, "children" | "ios" | "desktop">, WebViewHostProps {
  ios?: IOSWebViewHostProps;
  desktop?: DesktopWebViewHostProps;
}
import { mount, signal, Text, View, WebView, type WebViewNavigation, type WebViewRef } from "nsh";

function Browser() {
  const nav = signal<WebViewNavigation | null>(null);
  let web!: WebViewRef;
  return (
    <View style={{ flex: 1 }}>
      <View style={{ flexDirection: "row", gap: 16, padding: 12 }}>
        <Text onPress={() => web.goBack()} style={{ opacity: nav()?.canGoBack ? 1 : 0.4 }}>Back</Text>
        <Text onPress={() => web.reload()}>Reload</Text>
        <Text style={{ numberOfLines: 1, flex: 1 }}>{nav()?.title ?? ""}</Text>
      </View>
      <WebView ref={web} src="https://example.com" style={{ flex: 1 }} onNavigationStateChange={(n) => nav.set(n)} />
    </View>
  );
}

mount(Browser);

#Props

WebView accetta le view props (style, classes, layout, accessibilità, ref; nessun child), più:

PropTipoPredefinitoDescrizione
srcstringL’URL della pagina da mostrare.
htmlstringHTML inline, mostrato al posto di src.
baseUrlstringLa base rispetto a cui vengono risolti i link relativi di html.
injectedJavaScriptstringViene eseguito dopo il caricamento di ogni pagina.
injectedJavaScriptBeforeContentLoadedstringViene eseguito prima degli script propri di ogni pagina.
userAgentstringquello della piattaformaLa stringa dello user agent.
scrollablebooleantrueL’utente può scorrere la pagina.
javaScriptEnabledbooleantrueLe pagine eseguono script.
ios{ allowsBackForwardNavigationGestures?: boolean }Solo iOS: scorri dai bordi per tornare indietro e avanti.
desktop{ allowsBackForwardNavigationGestures?: boolean }macOS: gli swipe con due dita sul trackpad permettono di tornare indietro e avanti; Windows: swipe sul touchscreen; Linux: swipe sul touchpad.

#Eventi

EventoPayloadQuando
onLoadStartWebViewNavigationUna pagina inizia a caricarsi.
onLoadWebViewNavigationUna pagina ha terminato il caricamento.
onError{ message: string }Il caricamento di una pagina non è riuscito.
onNavigationStateChangeWebViewNavigationSono cambiati l’URL, il titolo, lo stato di caricamento o la cronologia.
onMessage{ data: string }La pagina ha chiamato window.nsh.postMessage(data).
interface WebViewNavigation {
  url: string;
  title: string;
  loading: boolean;
  canGoBack: boolean;
  canGoForward: boolean;
}

#Metodi del ref

MetodoDescrizione
reload()Ricarica la pagina.
goBack()Torna indietro nella cronologia.
goForward()Va avanti nella cronologia.
stopLoading()Interrompe il caricamento.
injectJavaScript(script)Esegue script nella pagina.
postMessage(data)Invia data (una stringa) alla pagina: un evento message su window, con data come event.data.

#Comunicare con la pagina

La pagina invia stringhe all’app con window.nsh.postMessage(…); l’app invia stringhe alla pagina con ref.postMessage(…). Invia JSON per i dati strutturati.

const page = `<!doctype html><html><head><meta name="viewport" content="width=device-width"></head>
<body>
  <button onclick="window.nsh.postMessage('hello from the page')">Post to the app</button>
  <p id="got"></p>
  <script>
    window.addEventListener('message', (e) => { document.getElementById('got').textContent = e.data; });
  </script>
</body></html>`;

let web!: WebViewRef;
const message = signal("");

<WebView ref={web} html={page} style={{ height: 200 }} onMessage={(e) => message.set(e.data)} />
<Text onPress={() => web.postMessage("hi from the app")}>Post to the page</Text>

#Capability

Quando la tua app dichiara capabilities in nsh.json, una web view può mostrare e navigare solo verso gli host elencati in webview; le altre navigazioni di primo livello vengono rifiutate a livello nativo. Un’app senza una chiave capabilities può mostrare qualsiasi contenuto. Consulta Sandbox and capabilities.

{
  "capabilities": {
    "webview": { "hosts": ["example.com", "*.example.com"] }
  }
}