div包含iframe就触发不了原来div的消息了。

div包含iframe就触发不了原来div的消息了。,第1张

问题问的不错~

iframe 是一个容器,在你现在说的这个情况下,相当于一个浏览器,这个里容器中加载了一个页面

也就是你的 quick_tablephp ,这个页面上并没有你说的 三个 事件,所以没得触发。

就是说,这两页面是完全独立的,只是看起来一个包含一个。

你可以在 这个 内嵌的页面上 的 body 上增加 鼠标 点击事件,事件调用 windowparentbuttonDivMouseDown() 就可以了

$('iframe:last')contents()find(":submit")click(); 是jquery 对象,没有click方法,你将他转成dom 看看

$('iframe:last')contents()find(":submit")[0]click();

个人觉得富文本是个兼容问题最多的模块之一,尤其是文档也没几个,把mozilla的api文档和IE的dom api关于selection和range的看了一个遍,一个个试,总算找到勉强能用的方法。

其实之前的富文本代码太乱,而且还有不少bug,只是产品经理不给时间改,O__O”…

这个富文本没有用iframe来做输入框,原因有二:

iframe是所有dom节点中消耗性能最大的,开多几个ie6/7就会卡到不行了;

因为webqq是多窗口聊天的,当光标点击到输入框时,iframe会捕获鼠标事件,通知不了聊天窗设置样式;

所以就用了div,设置contentEditable=”true”,这个属性基本浏览器都支持,除了firefox20(不过还真有用户还在用ff20⊙﹏⊙b汗)

这次修改发现了不少蛋疼的兼容性问题,挑几个归纳一下:

1 光标位置的保存/还原

富文本很大一部分兼容问题在于保存和还原光标的位置。说起光标位置,有个要注意的地方就是不要随便调用focus方法,连续调用两次focus会导致光标失去, 跟调用blur的效果一样,最好的方式就是让调用方在调用的时候保证光标在输入框中,内部代码中不要调用focus。

保存就不说了,keyup/mouseup的时候把当前的range存起来(这里有性能问题,但是blur事件又不能用,产生这个事件的时候,光标已经移到别处了),但是要保证光标在输入框中,否则range就是document的。

这里要注意到是,ie9支持了windowgetSelection方法,但是,它拿到的range对象没有createContextualFragment方法,这个方法可以传入一个html字符串,直接生成dom节点,跟pasteHTML有点类似,具体说明可以点击这里查看。因此自己封装的getSelection方法,要把documentselection放在前面。

还原光标位置,对于高级浏览器,直接把原来的range添加到selection就行,像这样

以上就是关于div包含iframe就触发不了原来div的消息了。全部的内容,包括:div包含iframe就触发不了原来div的消息了。、javascript,jquery,怎么在父窗口触发子窗口(iframe)某按钮的click事件呢、js富文本样式兼容问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/10102478.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存