【问题标题】:firefox Browser rejected fullscreen changeFirefox 浏览器拒绝全屏更改
【发布时间】:2014-05-28 13:33:22
【问题描述】:

当我们点击我的网站元素时,我正尝试全屏显示它,它适用于 chrome、IE,但不适用于 firefox。

我去了microsoft fullscreen API,测试了他们的代码,这些浏览器都没有问题。

这是我想要全屏显示的网站部分。

<div class="wrap">
    <div class="signin">
        <div style="margin: 2px 0px -25px 10px;"><h1>Sign In or <a href="<?php echo $this->url(array('module' => 'default','controller'=>'paid-sign-up','action'=>'index'),null,true); ?>" style="color:#F00;text-decoration:none;">Signup</a></h1></div>
        <?php echo $this->signin(); ?>
        <span class="forget">
        <a href="<?php echo $this->url(array('module' => 'default','controller'=>'forgot-password','action'=>'index'),null,true); ?>">Forgotten Password?</a> </span>
    </div>

这里是我使用的脚本

    <script type="text/javascript">
  var inFullScreen = false; // flag to show when full screen

  var fsClass = document.getElementsByClassName("wrap");
  for (var i = 0; i < fsClass.length; i++) {
    fsClass[i].addEventListener("click", function (evt) {
      if (inFullScreen == false) {
        makeFullScreen(evt.target); // open to full screen
      } else {
        reset();
      }
    }, false);
  }


  function makeFullScreen(divObj) {
alert (divObj);
  if (divObj.requestFullscreen) {
alert ('standard');
        divObj.requestFullscreen();
    }
    else if (divObj.msRequestFullscreen) {
alert ('ms');
      divObj.msRequestFullscreen();
    }
    else if (divObj.mozRequestFullScreen) {
alert ('moz');
      divObj.mozRequestFullScreen();
    }
    else if (divObj.webkitRequestFullscreen) {
alert ('webkit');
      divObj.webkitRequestFullscreen();
    }
    inFullScreen = true;
    return;
  }

  function reset() {
    if (document.exitFullscreen) {
      document.exitFullscreen();
    }
    else if (document.msExitFullscreen) {
      document.msExitFullscreen();
    }
    else if (document.mozCancelFullScreen) {
      document.mozCancelFullScreen();
    }
    else if (document.webkitCancelFullScreen) {
      document.webkitCancelFullScreen();
    }
    inFullScreen = false;
    return;
  }


</script>

最后一个有用的信息,我的网站是一个 zent 框架网站,这就是为什么会有一些 PHP。

【问题讨论】:

  • 你检查过控制台吗?当全屏请求失败时,浏览器会记录错误。
  • 我没有检查,因为我不知道。所以控制台中显示的错误是:“全屏请求被拒绝,因为 Element.mozRequestFullScreen() 没有从短时间运行的用户生成的事件处理程序中调用。”我真的不知道这是什么意思。
  • 这意味着你不能强制全屏,除非活动被一些用户交互(比如点击一个按钮)触发。
  • 是的,但是,当用户点击div时触发全屏,那么问题是什么?
  • 哦,你是对的 :) 那么在这种情况下,我不知道为什么请求会失败。我会做一个jsfiddle。

标签: javascript firefox fullscreen


【解决方案1】:

此代码段应该适用于大多数浏览器,包括。火狐浏览器。具体来说,Mozilla Firefox 坚持事件处理程序中的代码在 1 秒内执行。否则全屏请求将被拒绝。参考:Bug Report

HTML

<button id="view-fullscreen">Fullscreen</button>

Javascript

var viewFullScreen = document.getElementById("view-fullscreen");
if (viewFullScreen) {
  viewFullScreen.addEventListener("click", function() {
    var docElm = document.documentElement;
    if (docElm.requestFullscreen) {
      docElm.requestFullscreen();
    } else if (docElm.msRequestFullscreen) {
      docElm.msRequestFullscreen();
    } else if (docElm.mozRequestFullScreen) {
      docElm.mozRequestFullScreen();
    } else if (docElm.webkitRequestFullScreen) {
      docElm.webkitRequestFullScreen();
    }
  })
}

有关详细信息,请参阅 FullScreen API Fullscreen API

以上代码段的工作Demo:Fullscreen Demo

【讨论】:

  • 这几乎就是 OP 中的内容!
  • 好的,但就像我在帖子的 cmets 中回复 Pointy 一样:'当用户点击 div 时触发全屏'。那么问题出在哪里?
  • 可能是事件处理程序中的代码执行超过1秒。在这种情况下,Mozilla 会拒绝全屏请求。
  • 您的代码在不同的函数中有事件处理程序,然后您调用 makeFullScreen()。尝试在 makeFullScreen() 函数中集成事件处理程序,以在 1 秒 Mozilla 屏障内执行您的代码,如上面的代码 sn-p 所示。
  • 一个 console.log() 可以替换并报告较慢的用户对话框所涉及的 alert()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 2016-01-06
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多