Iframe与Mousmemoment——或者:父子冲突
Iframe vs. Mousemovement - or: the parent-child conflict
首先,我的项目有相当严格的限制:
- 脱机可用性
- 尽可能简单的编码
=>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不在您的域中时,您不能跨域执行此操作。
- Javascript-ID冲突的几率
- 更改嵌套对象的父子相关id
- 导致内容安全策略(CSP)冲突错误的本地jquery.js文件
- Pg承诺性能提升:在冲突中
- 数据与Javascript中的继承冲突
- Angular ng控制器与ng应用程序冲突
- 返回按钮代码段的Jquery冲突
- 调试一个简单的jQuery函数;想知道是否与其他代码冲突
- 使用JavaScript和HTML5画布进行冲突检测
- javascript对象原型与jquery冲突
- jQuery与导航菜单上的mouseover事件冲突.
- Javascript滑块不滑动,如何判断是否存在JS冲突
- Bing语音和Bing地图在Windows 8应用商店应用程序中冲突
- Javascript两个日期选择器冲突
- Sequelize:属性之间的命名冲突'播放列表'以及关联'播放列表'
- 2D Processingjs游戏中的冲突
- 为什么'滚动到顶部'脚本导致类型错误?jQuery冲突
- 防止WordPress javascript冲突的良好实践
- Iframe与Mousmemoment——或者:父子冲突
- 管理父子分区中的事件冲突