如何从React Native的Webview内部在浏览器中打开外部链接?

时间:2019-09-04 14:58:36

标签: react-native webview

我在Webview组件下方,我希望在移动浏览器应用程序中打开链接,而不是在应用程序当前的Webview中打开链接。

return() {
    <WebView source={{ html: `<a href="https://www.google.com">Google</a>`}} />
}

4 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

import { Linking } from 'react-native';

启动功能

Linking.openURL( some_url );

有关更多详细信息,请遵循以下完整示例:Just what you want

答案 1 :(得分:2)

这对我有用。

 import { WebView, Linking, NavState } from 'react-native';    

const html = ` 
 <a href="https://www.google.com">Google</a>
 <a href="https://www.twitter.com">Twitter</a>
`

class WebViewWrapper extends Component {
    private webview;

    handleNavigationStateChange = (event: NavState) => {
        if (event.url) {
            this.webview.stopLoading();
            Linking.openURL(event.url);
        }
    };

    render() {
        return (
            <WebView
                originWhitelist={['*']}
                ref={ref => {
                   this.webview = ref;
                }}
                source={{ html }}
                onNavigationStateChange={this.handleNavigationStateChange}
            />
        );
    }
}

答案 2 :(得分:1)

调用stopLoading将冻结WebView,并且一旦按下链接,链接可能会停止工作。最好使用onShouldStartLoadWithRequestAPI Reference)。

所以代码看起来像这样:

import { Linking } from 'react-native';
import { WebView } from 'react-native-webview';

const html = ` 
 <a href="https://www.google.com">Google</a>
 <a href="https://www.twitter.com">Twitter</a>
`;

const shouldStartLoadWithRequest = (req) => {
  // open the link in native browser
  Linking.openURL(req.url);

  // returning false prevents WebView to navigate to new URL
  return false;
};

const MyComponent = () => (
  <WebView
    originWhitelist={['*']}
    source={{ html }}
    onShouldStartLoadWithRequest={shouldStartLoadWithRequest}
  />
);

export default MyComponent;

请注意,onShouldStartLoadWithRequest在iOS上的行为略有不同。

答案 3 :(得分:0)

试试这个。这将节省您的时间和耐心:)

server = require('child_process').spawn('npm', ['run', 'start:dev'], {