使用iframe检测不活动

时间:2018-05-27 01:11:47

标签: javascript html iframe responsive-design three.js

我创建了一个在iframe中显示three.js模型的网站。我试图将用户重新定向到主页(index.html),只要他们在x分钟内处于非活动状态。我已经使用了一些java脚本,但问题是它只在我在iframe之外活动时才有效。当我实际旋转模型并与之交互时,它仍然会重定向我。我一直在研究这个问题并且没有找到解决方案。我尝试使用

调用iframe中的函数
onload="setup();"

但这并不起作用。这是我的代码,

Javscript

var timeoutID;

        function setup() {
            this.addEventListener("mousemove", resetTimer, false);
            this.addEventListener("mousedown", resetTimer, false);
            this.addEventListener("mouseover", resetTimer, false);
            this.addEventListener("mouseout", resetTimer, false);
            this.addEventListener("keypress", resetTimer, false);
            this.addEventListener("DOMMouseScroll", resetTimer, false);
            this.addEventListener("mousewheel", resetTimer, false);
            this.addEventListener("touchmove", resetTimer, false);
            this.addEventListener("MSPointerMove", resetTimer, false);

            startTimer();
        }

        function startTimer() {
            // wait 5 seconds before calling goInactive
            timeoutID = window.setTimeout(goInactive, 5000);
        }

        function resetTimer(e) {
            window.clearTimeout(timeoutID);

            goActive();
        }

        function goInactive() {
            // do something
            window.location = "index.html";
        }

        function goActive() {
            // do something

            startTimer();
        }

HTML

<main role="main" class="col-md-9 ml-sm-auto col-lg-12 px-0">

            <!-- Featured Content  -->

              <div class="embed-responsive embed-responsive-16by9">
                  <div id="test">

                      <iframe style="position:fixed; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%; border:none;
                   margin:0; padding:0; overflow:hidden; z-index:0;" class="embed-responsive-item" src="models/model.html" onload="setup();" allowfullscreen></iframe>
                  </div>

              </div>

        </main>

1 个答案:

答案 0 :(得分:2)

事件不会在&#34;障碍&#34;一个iframe。我不确定你使用的是什么案例,但iframe似乎不是实现这一目标的最佳方法。

但是,如果它是必需的,那么我建议监听iframe内容何时加载iframe.onload事件(或添加load的事件监听器),然后添加必要的点击事件在iframe.contentWindow上(如果脚本来自同一个来源,您只能访问)。

const frame = document.createElement('iframe');
document.body.appendChild(frame);
frame.addEventListener('load', function() {

  frame.contentWindow.addEventListener("mousemove", resetTimer, false);
  frame.contentWindow.addEventListener("mousedown", resetTimer, false);
  //..other events...

});

// ...
frame.src = ".../file.html";