Iframe与Mousmemoment——或者:父子冲突

Iframe vs. Mousemovement - or: the parent-child conflict

本文关键字:父子 冲突 或者 Mousmemoment Iframe      更新时间:2024-02-17

首先,我的项目有相当严格的限制:

  • 脱机可用性
  • 尽可能简单的编码

=>PHP和其他语言不是一个选项,只有html和javascript。


结构:

  • index.html
  • frame.html

index.html包含:

  • 一个简单的iframe:

<iframe width="100%"height="100%"src="frame.html"frameborder="0">
<iframe>

  • 用于禁用鼠标右键单击的JavaScript:

<script language="javascript">document.omousedown=disableclick
status="右键单击禁用";功能禁用单击(事件){
if(event.button==2){
警报("测试")
return false;}}
<脚本>

  • 另一种用于检测用户何时不活动的JavaScript:

<script>var timeoutID;函数setup(){
this.addEventListener("mousemove",resetTimer,false)
this.addEventListener("mousedown",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();}setup();函数startTimer(){
//等待X秒后再调用goInactive
timeoutID=window.setTimeout(goInactive,3000);}函数resetTimer(e){
window.clearTimeout(timeoutID)
goActive();}函数goInactive(){
//做点什么
警报("超时")
return false;}函数goActive(){
//做点什么
startTimer();}
<脚本>

  • css文件还包含对鼠标光标的一些限制:

身体{
背景颜色:#f0f0
光标:无!重要
-webkit用户选择:无
-moz用户选择:无
-ms用户选择:无;用户选择:无
}

=>这适用于index.html,但不适用于iframe(目前它是同一目录中的本地文件,但也应该能够链接到网站上)

我已经尝试了几个解决方案,但没有一个有效,同时保持iframe中的网站活动(这样你也可以浏览frame.html的内容)。

我对任何解决方案都持开放态度——如果它将脚本交给子级,或者子级从父级或任何覆盖解决方案获得脚本。如果有一个解决方法可以在同一目录中的脱机文件上重定向iframe,那么这在第一时间是可以的。

提前非常感谢!


编辑:

仍然存在问题——它进入了一个永无止境的循环:

$('iframe').load(function(){
  $(this).contents().find("body").mousemove(function(){
var timeoutID;
function setup() {
    this.addEventListener("mousemove", resetTimer, false);
    this.addEventListener("mousedown", 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();
}
setup();
function startTimer() {
    timeoutID = (this).setTimeout(goInactive, 4000);
}
function resetTimer(e) {
    (this).clearTimeout(timeoutID);
    goActive();
}
function goInactive() {
     alert("TIMEOUT");
     return false;
     goactive;
}
function goActive() {         
    startTimer();
}
    });
});
$('iframe').attr("src","JavaScript:'iframe content'");

我已经用jQuery完成了这项工作。链接

问题是,当iframe.html不在您的域中时,您不能跨域执行此操作。