[英]ExtJs 5 - catch keydown event of Ext.ux.IFrame
在我的ExtJs 5应用程序中,我使用Ext.ux.IFrame -component来显示来自内部网的新闻html文档。 当我按Backspace键或alt +向左/向右键时,浏览器的历史记录导航会触发,并且应用程序会加载新的。
为了防止iframe以外的行为,我在文档中附加了一个keydown侦听器
Ext.onReady(function () {
var documentObj = Ext.getDoc();
documentObj.on('keydown', globalKeyDown);
});
在回调中,我停止了这些事件
globalKeyDown: function (event, targetDomEle) {
var eventKey = event.getKey();
switch (eventKey) {
case event.BACKSPACE:
if ((!/^input$/i.test(targetDomEle.tagName) &&
!/^textarea$/i.test(targetDomEle.tagName)) ||
targetDomEle.disabled || targetDomEle.readOnly) {
event.stopEvent();
}
break;
case event.LEFT:
case event.RIGHT:
if (event.altKey) {
event.stopEvent();
}
break;
}
}
但是,当我尝试对iframe执行相同操作时,ExtJs框架侦听它的方法无法正常工作。
Ext.application({
name: 'Test',
requires: ['Ext.ux.IFrame'],
launch : function() {
var info = new Ext.Component({
renderTo: document.body,
html: 'above the iframe',
width: 350,
padding: '0 0 20 0',
margin: '0 0 1 0',
style: { border: 'solid 1px blue' },
});
var iframe = Ext.create('Ext.ux.IFrame',{
style: { border: 'solid 1px red' },
width: 350,
height: 350,
renderTo: document.body
});
var iframeDoc = iframe.getDoc();
var iframeDocEl = Ext.get(iframeDoc);
iframeDocEl.on('keydown', function(){
console.log('iframeDoc.on callback'); // <-- never executed
});
iframeDoc.onkeyup = function(){
console.log('onkeyup callback') // <-- works just fine
};
}
});
为什么iframeDocEl.on('keydown', ...
在这种情况下iframeDoc.onkeyup
? iframeDoc.onkeyup
方法只是一种解决方法,因为在回调中,我想使用框架事件对象与跨浏览器兼容(IE8 +)。
感谢您的每一个建议。
小提琴可以在Sencha小提琴中找到。
Ext.ux.Iframe源不包含从iframe本身触发的事件。 因此它不支持此功能。 前一段时间有一个ManagedIframe项目,它提供了许多功能,但仅在ExtJS 3中受支持。
值得在Sencha论坛上进行搜索,看看是否有人试图更新此扩展以使其与ExtJS 5兼容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.