如何在react-native-webview重新加载时重新注入JavaScript?

tp5buhyn  于 2022-11-17  发布在  React
关注(0)|答案(1)|浏览(191)

为了正常工作,我们需要将某些函数注入到我们集成在React Native App中的webview中。如果webview重新加载,javascript需要相应地重新注入。这怎么可能呢?
javascript应该被注入到webview中,而不仅仅是在webview重新加载之前。

jvidinwx

jvidinwx1#

主要思想是使用***injectJavaScript***进行页面加载。

const App = () => {
  const webViewRef = React.useRef<WebView>(null);
  const reloadsCount = React.useRef<number>(0);
  const onLoadInjected = `
    window.addEventListener('load', (event) => {
      window.ReactNativeWebView.postMessage('InjectNewCode');
    });
  `;

  const injectNewJsCode = () => {
    webViewRef.current?.injectJavaScript(`alert('new code injected')`)
    reloadsCount.current++
  }

  return (
    <WebView
      ref={ webViewRef }
      pullToRefreshEnabled={ true }
      source={{
        uri: 'https://stackoverflow.com/questions/74386954/how-to-reinject-javascript-when-a-react-native-webview-reloads',
      }}
      onMessage={ ({ nativeEvent }) => {
        if (nativeEvent.data === 'InjectNewCode') {
          // skip the inital load event
          if (reloadsCount.current > 0) {
            injectNewJsCode()
          }
          reloadsCount.current++
        }
      }}
      injectedJavaScript={ onLoadInjected }
    />
  );
};

相关问题