在默认网络浏览器中打开 URL

Posted

技术标签:

【中文标题】在默认网络浏览器中打开 URL【英文标题】:Open Url in default web browser 【发布时间】:2017-10-03 21:09:31 【问题描述】:

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

我们通过 android 中的意图打开 url,与我想要实现的功能相同。

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

【问题讨论】:

【参考方案1】:

你应该使用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,如果您有一个抓取新闻文章的应用程序并且您想在单独的浏览器中打开新闻文章的超链接,这将如何工作? 看看这个,facebook.github.io/react-native/docs/…。这可能会有所帮助@Daniel @RajKumarN 我们如何在应用程序内打开外部 URL 而不重定向到浏览器? 此答案顶部的 link 不再有效。一定要喜欢讽刺:) @CalebKoch 在 URL 的末尾删除 .html 会使链接再次起作用。更新了我的答案,谢谢提醒。【参考方案2】:

一种更简单的方法,无需检查应用是否可以打开网址。

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

用按钮调用它。

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

【讨论】:

如何处理空值?假设我从后端接收 URL,但它返回 null 而不是字符串,应用程序正在崩溃。 @ASN 您在将该 url 传递给 openURL 方法之前进行检查。例如:If (this.state.url) Linking.openURL(this.state.url)。如果您不想事先检查,也可以使用 catch 子句。 是的,我就是这样处理的。谢谢你:) 嗨!只是一个问题,如果选择默认打开应用程序并且我需要在浏览器中打开相同的链接,您建议对 android 做什么? 简单,简短,有用的解决方案,你能评论一下当我从浏览器手动返回到应用程序时显示空白屏幕。【参考方案3】:

在 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>
  )

【讨论】:

【参考方案4】:

试试这个:

import React,  useCallback  from "react";
import  Linking  from "react-native";
OpenWEB = () => 
  Linking.openURL(url);
;

const App = () => 
  return <View onPress=() => OpenWeb>OPEN YOUR WEB</View>;
;

希望这能解决您的问题。

【讨论】:

以上是关于在默认网络浏览器中打开 URL的主要内容,如果未能解决你的问题,请参考以下文章

MoSync:在默认网络浏览器中打开链接

微信中调用打开手机默认浏览器打开指定网页URL的实现方式

vue修改浏览器下载文件默认名字

电脑打开网页出现URL无法获取怎么解决啊

打开网页后 找不到URL怎么办

调试/运行网站时如何更改默认网络浏览器?