เปิด Url ในเว็บเบราว์เซอร์เริ่มต้น


93

ฉันเป็นคนใหม่ในการตอบสนองพื้นเมืองและฉันต้องการเปิดurlในเบราว์เซอร์เริ่มต้นเช่น Chrome ใน Android และ iPhoneทั้งคู่

เราเปิด url ผ่านทางความตั้งใจใน Android เช่นเดียวกับฟังก์ชันที่ฉันต้องการบรรลุ

ฉันมีการค้นหาหลายครั้ง แต่ก็จะให้ฉันผลมาจากการ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>
    );
  }
}

นี่คือตัวอย่างที่คุณสามารถลองใช้งาน 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
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 หากแอปถูกเลือกให้เปิดตามค่าเริ่มต้นและฉันต้องเปิดลิงก์เดียวกัน แต่ในเบราว์เซอร์
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.