我创建了一个在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>
答案 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";