Internet Explorer 7上粘贴事件和iframe的问题

时间:2013-05-15 14:06:43

标签: javascript events iframe internet-explorer-7 paste

我有一个WYSIWYG编辑器,基于JqueryRTE(code.google.com/p/lwrte),它使用iframe作为主要对象并启用一些格式化方法。我仍然需要清理粘贴的文本,因为用户倾向于粘贴MS Word或Openoffice.org文档中的格式化文本,并且不支持该格式的最大部分。 我使用以下函数将'paste'事件附加到iframe文档:

 function bindEvent(el, eventName, eventHandler) {
                    if (el.addEventListener) {
                        el.addEventListener(eventName, eventHandler, false);
                    } else if (el.attachEvent){
                        el.attachEvent('on' + eventName, eventHandler);
                    }
                }

并按如下方式调用:

bindEvent(iframe.contentWindow.document, 'paste', function () { cleanPastedText(); });

它在FF和最新的IE版本上运行得很好,而我无法在IE7上调用事件处理程序。我用调试器研究了bindEvent,它执行了attachEvent。我甚至试过绑定处理程序到主窗体,但仍然没有结果。你可以指导我,可能的原因是什么,如果将文本粘贴到输入或文本区域以外的元素,是否可以使用IE7捕获“粘贴”事件?是否有可能,事件实际上在iframe子元素的某处被触发,但是没有传播到父节点? iframe内部html大致如下:

<html><head></head><body>here comes some text and some pasted text and other blahblah</body></html>
  

1 个答案:

答案 0 :(得分:1)

我发现,窗口和文档对象不会在旧版IE(&lt; IE9)上触发粘贴事件。 quirksmode上的相应文章:  quirksmode - cut,copy,paste

此外,事件不会传播到iframe内部文档之外,因此,在我的情况下,我必须将事件侦听器分配给&lt; body&gt;或者到&lt; html&gt; iframe文档的元素。生成的代码行:

bindEvent(iframe.contentWindow.document.getElementsByTagName("body")[0], 'paste', function () { cleanPastedText(); });

由于后者已经完成,它就像一个魅力。希望这个答案对其他SO用户有用。