Mở Url trong trình duyệt web mặc định


90

Tôi mới sử dụng react-native và tôi muốn mở url trong trình duyệt mặc định như Chrome trên Android và iPhone cả.

Chúng tôi mở url thông qua ý định trong Android giống như chức năng tôi muốn đạt được.

Tôi đã tìm kiếm nhiều lần nhưng nó sẽ cho tôi kết quả là Deepklinking .

Câu trả lời:


212

Bạn nên sử dụng Linking.

Ví dụ từ tài liệu:

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

Dưới đây là một ví dụ bạn có thể thử trên 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, điều này sẽ hoạt động như thế nào nếu bạn có một ứng dụng lấy các bài báo và bạn muốn mở các siêu liên kết của các bài báo trong một trình duyệt riêng?
Daniel

Kiểm tra điều này, facebook.github.io/react-native/docs/… . Điều này có thể hữu ích @Daniel
Raj Kumar N

@RajKumarN Làm cách nào để mở URL bên ngoài bên trong ứng dụng không chuyển hướng đến trình duyệt?
LazyCoder

9

Một cách đơn giản hơn giúp loại bỏ việc kiểm tra xem ứng dụng có thể mở url hay không.

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

Gọi nó bằng một nút.

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

1
Làm cách nào để xử lý các giá trị null? giả sử tôi nhận được URL từ chương trình phụ trợ nhưng nó trả về null thay vì một chuỗi, ứng dụng đang gặp sự cố.
ASN

2
@ASN Bạn kiểm tra trước khi chuyển url đó cho openURLphương thức. Ví dụ: If (this.state.url) Linking.openURL(this.state.url). Bạn cũng có thể đặt mệnh đề bắt để sử dụng nếu bạn không muốn kiểm tra trước.
CLUTCHER

1
Vâng, đó là cách tôi xử lý nó. Cảm ơn bạn :)
ASN

Chào! Chỉ là một câu hỏi, Bạn đề xuất làm gì cho android nếu ứng dụng được chọn để mở theo mặc định và tôi cần mở cùng một liên kết nhưng trong trình duyệt?
Andriy Khlopyk

giải pháp đơn giản, ngắn gọn, hữu ích, bạn có thể nhận xét về nó hiển thị màn hình trống khi tôi quay lại thủ công từ trình duyệt đến ứng dụng.
ganeshdeshmukh

1

Trong React 16.8+, sử dụng các thành phần chức năng, bạn sẽ làm

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>
  )
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.