デフォルトのWebブラウザでURLを開く


93

私は、新しい内をネイティブに反応していると私はオープンにしたいURLAndroidとiPhoneでのクロームのようなデフォルトのブラウザの両方。

私が達成したい機能と同じように、Androidでインテントを介してURLを開きます。

何度も検索しましたが、Deepklinkingの結果が表示されます。

回答:


217

を使用する必要があります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>
    );
  }
}

ここでは、上で試すことができます例ですエキスポスナックは

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することができ
ラジ・クマール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
null値を処理するにはどうすればよいですか?バックエンドからURLを受信して​​いるが、文字列ではなくnullが返され、アプリがクラッシュしているとします。
ASN

2
@ASNそのURLをopenURLメソッドに渡す前に、そのチェックを行います。例:If (this.state.url) Linking.openURL(this.state.url)。事前に確認したくない場合は、catch句を使用することもできます。
CLUTCHER

1
ええ、それは私がそれを処理した方法です。ありがとう:)
ASN20年

こんにちは!ただの質問です。アプリがデフォルトで開くように選択されていて、同じリンクをブラウザで開く必要がある場合、Androidに対して何を提案しますか?
AndriyKhlopyk20年

シンプルで短くて便利な解決策です。ブラウザからアプリに手動で戻ったときに空白の画面が表示されることについてコメントしていただけますか。
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>
  )
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.