document.documentElement requestFullscreen - undefined не является объектом, мобильный IOS

После этого урока я написал этот компонент реакции (упрощенный, чтобы показать только проблему):

import React, { Component } from "react";

class HeaderImages extends Component {

  //usage: getreqfullscreen().call(targetelement) // open full screen on targetelement
  getreqfullscreen = () => {
    var root = document.documentElement;
    return (
      root.requestFullscreen ||
      root.webkitRequestFullscreen ||
      root.mozRequestFullScreen ||
      root.msRequestFullscreen
    );
  };

  //usage: getexitfullscreen.call(document) //always pass document into it
  getexitfullscreen = () => {
    return (
      document.exitFullscreen ||
      document.webkitExitFullscreen ||
      document.mozCancelFullScreen ||
      document.msExitFullscreen
    );
  };

  getfullscreenelement = () => {
    return (
      document.fullscreenElement ||
      document.webkitFullscreenElement ||
      document.mozFullScreenElement ||
      document.msFullscreenElement
    );
  };

  toggleFullScreen = e => {
    if (this.getfullscreenelement() == null) {
      // if browser is currently not in full screen
      this.getreqfullscreen().call(e.target);
    } else {
      this.getexitfullscreen().call(document);
    }
  };

  render() {

    return (
      <div>
        <img
          src={url}
          className="header-image"
          alt="project-screenshot"
          onClick={this.toggleFullScreen.bind(this)}
        />
      </div>
    );
  }
}

export default HeaderImages;

Я хотел бы, чтобы при нажатии на изображение появлялось полноэкранное изображение. Это работает в любом браузере для настольного компьютера, с которым я тестировал, но когда я открываю приложение на мобильных версиях Chrome и Safari для ios, я получаю следующую ошибку:

TypeError: undefined не является объектом (оценивается как _this.getreqfullscreen(). Call')

Указывая на строку:this.getreqfullscreen().call(e.target);

Трассировка стека указывает на react-dom,

У меня проблемы с выяснением, что означает ошибка и как ее исправить - onClick Функция проходит узел DOM правильно и document.documentElement кажется, хорошо.

Спецификации Element.requestFullscreen() показывают, что эта функция доступна в мобильном Chrome.

Есть ли альтернативный способ сделать это?

2 ответа

Я думаю, что вы просто опечатка: webkitRequestFullscreen пытаться webkitRequestFullScreen а также msRequestFullscreen в msRequestFullScreen (экран => экран)

Изменить: я обнаружил здесь, что Chrome на IOS использует Safari и не поддерживает полноэкранный API, поэтому вам может понадобиться polyfill.

Этот код работал у меня:

      $("#fullsize").click(function (){
    polyfill();
});
function polyfill() {
    var interesting = document.getElementById("interesting");

    // Check if this browser support the fullscreen API
    if (typeof document.fullscreenEnabled !== undefined) {

        // Register a click handler for the <div>
        interesting.addEventListener("click", function() {

            // Toggle fullscreen
            if (document.fullscreenElement) {
                document.exitFullscreen();
            } else {
                this.requestFullscreen();
            }

        }, false);

    }
Другие вопросы по тегам