Öffnen Sie die URL im Standard-Webbrowser


90

Ich bin neu in React-Native und möchte die URL in einem Standardbrowser wie Chrome in Android und iPhone öffnen .

Wir öffnen URL über Absicht in Android genauso wie Funktionalität, die ich erreichen möchte.

Ich habe viele Male gesucht, aber es wird mir das Ergebnis von Deepklinking geben .

Antworten:


212

Sie sollten verwenden Linking.

Beispiel aus den Dokumenten:

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>
    );
  }
}

Hier ist ein Beispiel, das Sie mit Expo Snack ausprobieren können :

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, wie würde dies funktionieren, wenn Sie eine App haben, die Nachrichtenartikel erfasst und die Hyperlinks der Nachrichtenartikel in einem separaten Browser öffnen möchten?
— Daniel

Überprüfen Sie dies, facebook.github.io/react-native/docs/… . Dies kann hilfreich sein @ Daniel
— Raj Kumar N

@RajKumarN Wie können wir die externe URL in der App öffnen, ohne zum Browser umzuleiten?
— LazyCoder

9

Ein einfacherer Weg, bei dem nicht überprüft werden muss, ob die App die URL öffnen kann.

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

Mit einem Knopf aufrufen.

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

1
Wie gehe ich mit Nullwerten um? Angenommen, ich erhalte eine URL vom Backend, die jedoch anstelle einer Zeichenfolge null zurückgibt. Die App stürzt ab.
— ASN

2
@ASN Sie führen diese Überprüfung durch, bevor Sie diese URL an die openURLMethode übergeben. Zum Beispiel : If (this.state.url) Linking.openURL(this.state.url). Sie können die catch-Klausel auch verwenden, wenn Sie sie nicht vorher überprüfen möchten.
— CLUTCHER

1
Ja, so habe ich damit umgegangen. Vielen Dank :)
— ASN

Hallo! Nur eine Frage: Was schlagen Sie für Android vor, wenn die App standardmäßig zum Öffnen ausgewählt ist und ich denselben Link nur im Browser öffnen muss?
— Andriy Khlopyk

einfache, kurze, nützliche Lösung, können Sie kommentieren, zeigt leeren Bildschirm, wenn ich manuell vom Browser zur App zurückkomme.
— Ganeshdeshmukh

1

In React 16.8+ würden Sie Funktionskomponenten verwenden

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>
  )
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.