Apri URL nel browser web predefinito


93

Sono nuovo in React-Native e desidero aprire l' URL nel browser predefinito come Chrome su Android e iPhone .

Apriamo l'URL tramite intento in Android con le stesse funzionalità che voglio ottenere.

Ho cercato molte volte ma mi darà il risultato di Deepklinking .

Risposte:


217

Dovresti usare Linking.

Esempio dai documenti:

class OpenURLButton extends React.Component {
  static propTypes = { url: React.PropTypes.string };
  handleClick = () => {
    Linking.canOpenURL(this.props.url).then(supported => {
      if (supported) {
        Linking.openURL(this.props.url);
      } else {
        console.log("Don't know how to open URI: " + this.props.url);
      }
    });
  };
  render() {
    return (
      <TouchableOpacity onPress={this.handleClick}>
        {" "}
        <View style={styles.button}>
          {" "}<Text style={styles.text}>Open {this.props.url}</Text>{" "}
        </View>
        {" "}
      </TouchableOpacity>
    );
  }
}

Ecco un esempio che puoi provare su Expo Snack :

import React, { Component } from 'react';
import { View, StyleSheet, Button, Linking } from 'react-native';
import { Constants } from 'expo';

export default class App extends Component {
  render() {
    return (
      <View style={styles.container}>
       <Button title="Click me" onPress={ ()=>{ Linking.openURL('https://google.com')}} />
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
    paddingTop: Constants.statusBarHeight,
    backgroundColor: '#ecf0f1',
  },
});

@RajKumarN, come funzionerebbe se disponi di un'app che acquisisce articoli di notizie e desideri aprire i collegamenti ipertestuali degli articoli di notizie in un browser separato?
Daniel

Dai un'occhiata a facebook.github.io/react-native/docs/… . Questo può essere utile @Daniel
Raj Kumar N

@RajKumarN Come possiamo aprire l'URL esterno all'interno dell'app che non reindirizza al browser?
LazyCoder

9

Un modo più semplice che elimina il controllo se l'app può aprire l'URL.

  loadInBrowser = () => {
    Linking.openURL(this.state.url).catch(err => console.error("Couldn't load page", err));
  };

Chiamandolo con un pulsante.

<Button title="Open in Browser" onPress={this.loadInBrowser} />

1
Come si gestiscono i valori nulli? diciamo che sto ricevendo un URL dal backend ma ha restituito null invece di una stringa, l'app si blocca.
ASN

2
@ASN Fai questo controllo prima di passare quell'URL al openURLmetodo. Ad esempio: If (this.state.url) Linking.openURL(this.state.url). Puoi anche mettere la clausola catch da usare se non vuoi controllare prima.
CLUTCHER

1
Sì, è così che l'ho gestito. Grazie :)
ASN

Ciao! Solo una domanda, cosa suggerisci di fare per Android se l'app è selezionata per l'apertura di default e ho bisogno di aprire lo stesso link ma nel browser?
Andriy Khlopyk

soluzione semplice, breve, utile, puoi commentare se mostra una schermata vuota quando torno manualmente dal browser all'app.
ganeshdeshmukh

1

In React 16.8+, usando componenti funzionali, lo faresti

import React from 'react';
import { Button, Linking } from 'react-native';

const ExternalLinkBtn = (props) => {
  return <Button
            title={props.title}
            onPress={() => {
                Linking.openURL(props.url)
                .catch(err => {
                    console.error("Failed opening page because: ", err)
                    alert('Failed to open page')
                })}}
          />
}

export default function exampleUse() {
  return (
    <View>
      <ExternalLinkBtn title="Example Link" url="https://example.com" />
    </View>
  )
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.