기본 웹 브라우저에서 URL 열기


90

나는 react-native가 처음이며 Android 및 iPhone의 Chrome과 같은 기본 브라우저 에서 URL 을 열고 싶습니다 .

우리는 내가 원하는 기능과 같은 Android에서 의도를 통해 URL을 엽니 다.

여러 번 검색했지만 Deepklinking 결과를 얻을 수 있습니다.

답변:


211

당신은 사용해야합니다 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, 뉴스 기사를 가져 오는 앱이 있고 별도의 브라우저에서 뉴스 기사의 하이퍼 링크를 열려면 어떻게 작동할까요?
Daniel

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
네, 그렇게 처리했습니다. 감사합니다 :)
ASN

안녕하세요! 질문 하나, 앱이 기본적으로 열리도록 선택되어 있고 브라우저에서 동일한 링크를 열어야하는 경우 Android에서 무엇을 할 것을 제안합니까?
Andriy Khlopyk

간단하고 짧고 유용한 솔루션입니다. 브라우저에서 앱으로 수동으로 돌아올 때 빈 화면이 표시된다는 점에 대해 설명해 주시겠습니까?
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.