Открыть URL-адрес в веб-браузере по умолчанию

90

Я новичок в react-native, и я хочу открыть URL-адрес в браузере по умолчанию, например Chrome в Android и iPhone .

Мы открываем URL-адрес через намерение в Android так же, как и функциональность, которую я хочу достичь.

Я много раз искал, но он дал мне результат Deepklinking .

Мохит Сутар
источник

Ответы:

212

Вам следует использовать Linking.

Пример из документов:

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

Вот пример, который вы можете попробовать на 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, как это будет работать, если у вас есть приложение, которое собирает новостные статьи, и вы хотите открывать гиперссылки на новостные статьи в отдельном браузере?
Даниэль
Проверьте это на facebook.github.io/react-native/docs/… . Это может быть полезно @Daniel
Raj Kumar N
@RajKumarN Как мы можем открыть внешний URL-адрес внутри приложения, не перенаправляя его в браузер?
LazyCoder
9

Более простой способ, который исключает проверку того, может ли приложение открывать URL-адрес.

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

Вызов с помощью кнопки.

<Button title="Open in Browser" onPress={this.loadInBrowser} />
МУФТА
источник
1
Как мне обрабатывать нулевые значения? скажем, я получаю URL-адрес от бэкэнда, но он вернул нуль вместо строки, приложение вылетает.
ASN
2
@ASN Вы выполняете эту проверку перед передачей этого URL-адреса openURLметоду. Например: If (this.state.url) Linking.openURL(this.state.url). Вы также можете использовать предложение catch, если не хотите делать предварительную проверку.
CLUTCHER
1
Да, вот как я с этим справился. Спасибо :)
ASN
Здравствуй! Просто вопрос, что вы предлагаете сделать для Android, если приложение выбрано для открытия по умолчанию, и мне нужно открыть ту же ссылку, но в браузере?
Андрей Хлопык
простое, короткое, полезное решение, можете ли вы прокомментировать его, когда я возвращаюсь вручную из браузера в приложение, отображается пустой экран.
ganeshdeshmukh
1

В React 16.8+, используя функциональные компоненты, вы бы сделали

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>
  )
}
wp-overwatch.com
источник