在默认的Web浏览器中打开网址


90

我是react-native的新手,我想在默认浏览器(例如Android和iPhone中的Chrome)中打开url

我们通过intent在Android中打开网址,就像我要实现的功能一样。

我已经搜索了很多次,但是它会给我Deepklinking的结果。

Answers:


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 Expo的示例:

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)


@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,但它返回的是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>
  )
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.