React Native - open links in browser

前端 未结 13 658
遇见更好的自我
遇见更好的自我 2020-12-04 11:59

Hi i am using react native\'s webview to display some html, i want that whenever a user clicks a link inside that html, it will open the user\'s browser with that link.

13条回答
  •  有刺的猬
    2020-12-04 12:39

    A big issue with using "stopLoading()" is that on Android it disables further taps on any other links from that source page.

    The WebView component is being split out of core RN and into the community's hands. If you use that version instead (https://github.com/react-native-community/react-native-webview), you can use "onShouldStartLoadWithRequest" prop on both iOS and Android, which makes this a lot more elegant.

    Building off of Damien Varron's really helpful answer, here's an example for how you'd leverage that prop to avoid stopLoading that works cross platform:

    onShouldStartLoadWithRequest={event => {
        if (event.url !== uri) {
            Linking.openURL(event.url)
            return false
        }
        return true
    }}
    

    And here's how you might do it if your source is HTML as opposed to a URI:

    onShouldStartLoadWithRequest={event => {
        if (event.url.slice(0,4) === 'http') {
            Linking.openURL(event.url)
            return false
        }
        return true
    }}
    

    As basbase pointed out, you could also do it this way (I've added the about:blank part). I plan to trial and error more to see which holds up best.

    onShouldStartLoadWithRequest={event => {
        if (!/^[data:text, about:blank]/.test(event.url)) {
            Linking.openURL(event.url)
            return false
        }
        return true
    }}
    

提交回复
热议问题