我正在处理一个使用框架和框架的ball-of-mudd项目。 iframe创建一个“可自定义”的界面(就像人们在2002年所做的那样)。
应用程序在hta内运行,可以模拟真正的WPF样式应用程序。我需要捕获密钥,以便我可以有选择地更改/刷新一些子帧。
我想要做的是,如果有一个名为桌面的子子帧并且其中有一些帧,我将如何安全地捕获所有帧中的事件;并刷新帧子帧?
任何帮助表示感谢;对于因重复最后一段太多次而导致的nausia,我不承担任何责任。 :)
答案 0 :(得分:1)
回答获取格式
arrFrames[i].document.onkeypress = function(){
var evtobj = window.event ? event : e;
evtobj.cancelBubble = true;
if (evtobj.stopPropagation){ evtobj.stopPropagation();}
top.console.log(evtobj.type+' - '+(evtobj.which?evtobj.which:evtobj.keyCode));
};
答案 1 :(得分:0)
我对HTA一无所知,但问题标记为javascript / jquery / iframe,所以我猜它不是问题......
您可以使用window.top中的对象在集中的位置管理您的事件。
在主窗口中,您可以使用以下内容:
var getTopObject = function() {
return window.top.topObject;
}
var TopClass = function () {
this.processClick = function (frame) {
//do something...
alert('click in ' + frame.document.location.toString());
var msj = frame.document.getElementById("msj");
msj.innerHTML = "change!";
};
}
window.top.topObject = new TopClass();
然后,在每个iframe上,你输入:
window.onclick = function () { getTopObject().processClick(window); };
这样您就会收到点击事件的通知。 另请注意,在示例中的“processClick”函数中,您可以访问iframe文档。
当然,你可以做得更复杂,但这是基本的想法。在您的情况下,您将不得不处理不同的事件。
希望这有帮助,对不起我的英语!
答案 2 :(得分:0)
工作;使用调用自身的函数挖掘循环中的帧;我把它限制在8而不是我知道它会得到最深的。你可以随时改变它。
var XXX_util_keyboard = function()
{
//"private" variables:
var objTopWindow = top.window.frames,
arrFrames = [],
MaxDepth = 8;
//"private" methods:
var AddToArray = function(obj){
if(typeof obj.document != "undefined") {
arrFrames.push(obj);
return true;
}
return false;
};
var DeleteFromArray = function(obj){
if(typeof obj != "undefined") {
arrFrames.splice(arrFrames.indexOf(obj), 1);
return true;
}
return false;
};
var FrameLoop = function(objFrames){
if(MaxDepth > 0){
if(objFrames !== null)
{
for(var k = 0; k < objFrames.frames.length; k++)
{
var tmp = objFrames.frames[k];
AddToArray( tmp );
FrameLoop( tmp );
}
this.MaxDepth--;
}
}
};
var AttachEvent = function(key, fn) {
for(var i = 0; i < arrFrames.length; i++){
arrFrames[i].document.onkeypress = function(e) {
var evt = e || window.event,
charCode;
if(evt === null){ evt = this.parentWindow.event; /*IE doesnt capture scope correctly*/ }
charCode = evt.keyCode || evt.which;
alert(charCode);
evt.cancelBubble = true;
if (evt.stopPropagation){ evt.stopPropagation();}
};
}
};
return {
init: function()
{
AddToArray(this.getTopWindow()[0]);
FrameLoop(this.getTopWindow()[0]);
},
getFrames: function()
{
if(arrFrames.length < 1){ FrameLoop(objTopWindow[0]); }
return arrFrames;
},
getTopWindow: function()
{
return objTopWindow === undefined ? window.frames : objTopWindow.window.frames;
},
attachEvent: function()
{
if(arrFrames.length < 1){ FrameLoop(objTopWindow[0]); }
AttachEvent();
}
};
}();