1

我正在为我的应用在 App WebView 中实现。我必须打开一些信息页面,并且我必须根据 webview 中任何特定位置(包含不同类型的数据)的点击来获取一些数据。但是在 iOS 中,在onShouldStartLoadWithRequest自动加载任何 URL 调用时,会导致在 HTML 内容中打开不同的 URL。但它在 Android 中按预期工作。

<WebView
  originWhitelist={["*"]}
  style={style}
  source={source}
  showsVerticalScrollIndicator={showsVerticalScrollIndicator}
  startInLoadingState={startInLoadingState}
  javaScriptEnabled={true}
  onShouldStartLoadWithRequest={request => {
    return onLoadWebViewOnClick(request)
  }}
/>

在这个handleUrlNavigation中会处理任何点击动作的请求,但是每次都是自动调用。我该如何处理?

4

1 回答 1

4

这就是我解决它的方法。它需要平台检查,因为 iOS 会在加载时调用该函数,而 android 不会。

在 ios 和 android 上,我的 webview 都使用我的 HTML 加载,当用户单击 webview 内的链接时,它们将被重定向到本机浏览器。

    onShouldStartLoadWithRequest={event => {
        const isExternalLink =
          Platform.OS === 'ios' ? event.navigationType === 'click' : true;
        if (event.url.slice(0, 4) === 'http' && isExternalLink) {
          Linking.canOpenURL(event.url).then(supported => {
            if (supported) {
              Linking.openURL(event.url);
            }
          });
          return false;
        }
        return true;
      }}
于 2020-06-11T21:29:28.397 回答