所以,我正在使用已经设置过的Grammar等的WYSIWYG编辑器。我的任务是为交叉程序添加复制和粘贴功能。我在Ubuntu上使用Google Chrome,在Ubuntu和Windows上使用Firefox,但在Windows上不在Chrome中。
我已将问题追溯到基本的问题。当发送粘贴命令(通过Ctrl + V)事件时,我立即将焦点更改为隐藏的,可信的iframe,并在那里触发事件。然后我等待它冒泡然后处理解析和粘贴。
this.pasteOperation = function(event, controller) {
this._cutpastearea.getEditable().focus().trigger(event);
setTimeout(function() { controller.clipboardControl().handlePaste(); }, 1);
},
(其中getEditable获取iframe的contenteditable部分)
现在,如果我显示iframe,并禁用设置超时,我发现已经抓住了焦点,但没有粘贴任何内容。如果我继续手动粘贴它,然后调用该函数,一切正常。
那么为什么这不会触发事件?
编辑:同样在Chromium Issues提出问题。它似乎只是一个iframe问题。
答案 0 :(得分:1)
找到了解决方法。不要调用触发器,而是调用它:
$.fn.forwardEvent = function(event) {
this.each(function() {
if (this.dispatchEvent) {
if (event.originalEvent) {
event = event.originalEvent
}
try {
this.dispatchEvent(event);
} catch(error) {
$(this).trigger(event);
}
}
else {
$(this).trigger(event);
}
});
return this;
};