首页 > 解决方案 > React Native 如何控制 WebView 中的播放/暂停视频

问题描述

我正在尝试通过 React Native 在 WebView 中播放和暂停视频。
但是当 this.state.shouldPlay 变为 true 时,下面注入的 JavaScript 就不起作用了。

injectedJavaScript=
{`document.getElementsByTagName("video")[0].play();`}

请告知如何从 React Native 控制 WebView 中的视频。
由于性能问题,无法使用 react-native-video。

import * as React from 'react';
import { Component, useState, useEffect  } from 'react';
import { Text, View, StyleSheet, Image, TouchableOpacity} from 'react-native';
import {WebView} from 'react-native-webview';

export default class App extends Component {

  constructor(props) {
    super(props);
    this.state = {
      shouldPlay: false, // not play at default
    }
  }

  _handlePlayAndPause = () => {
    if (this.state.shouldPlay == false) {
      this.setState({shouldPlay: true });
    } else {
      this.setState({shouldPlay: false });
    };

  render() {
    const {shouldPlay } = this.state;

    return (
        <View style={styles.container}>
          { shouldPlay ? 
            <View>
              <WebView
                source={{ uri: www.url.com/sample.mp4 }}
                javaScriptEnabled = {true}
                injectedJavaScript=
                  {`document.getElementsByTagName("video")[0].play();`}
              />
            </View>
          :
            <View>
              <WebView
                source={{ uri: www.url.com/sample.mp4 }}
                javaScriptEnabled = {true}
                injectedJavaScript=
                  {`document.getElementsByTagName("video")[0].pause();`}
              />
            </View>
          }

          { shouldPlay ?
            <View>
              <TouchableOpacity onPress={ this._handlePlayAndPause } >  
                  <Ionicons name="ios-pause"/>
              </TouchableOpacity>
            </View>
          :
            <View>
              <TouchableOpacity onPress={ this._handlePlayAndPause } > 
                  <Ionicons name="ios-play-circle"/>
              </TouchableOpacity>
            </View>              
          }
        </View>
    )  
  }

}

谢谢你。

标签: react-nativewebviewhtml5-video

解决方案


推荐阅读