Firefox中Iframe的blur與focus事件問(wèn)題
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
最近在做一個(gè)網(wǎng)站的HTML文章發(fā)布功能,用到了HTML編輯器,這個(gè)是以Iframe為基礎(chǔ)的編輯器(貌似網(wǎng)上大多的都是用iframe 的)。卻發(fā)現(xiàn)一個(gè)問(wèn)題,IE下運(yùn)行得好好的,在Firefox里卻始終不能提交更新后的數(shù)據(jù)到服務(wù)器上,找了半天原因才發(fā)現(xiàn)原來(lái)是在iframe的 onblur事件里面調(diào)了更新數(shù)據(jù)內(nèi)容的方法,但firefox下卻沒(méi)有執(zhí)行。 于是立馬開(kāi)始google了一把,發(fā)現(xiàn)遇到問(wèn)題的不是我一個(gè)人,大量的人都是在問(wèn)怎么解決firefox中觸發(fā)blur和focus事件的問(wèn)題。答案到是給了一大堆,卻沒(méi)一個(gè)靠譜的。有一種答案說(shuō)是放到setInterval里去執(zhí)行。
看了半天也沒(méi)明白這到底是怎么回事,調(diào)試了一把發(fā)現(xiàn)在是在第一次運(yùn)行的時(shí)候在setTimeout觸發(fā)了后,確實(shí)觸發(fā)了blur事件和focus事 件,可是之后再通過(guò)鼠標(biāo)點(diǎn)擊想觸發(fā)這兩個(gè)事件也不行,看樣子這兩個(gè)事件是有機(jī)會(huì)觸發(fā)的,也許是采用一般的方式不能吧。不過(guò)用setTimeout這種方式 太雞肋了,總不至于每次去調(diào)用setTimeout去觸發(fā)吧,我要是知道什么時(shí)候去調(diào)setTimeout了還不如直接去調(diào)用事件處理函數(shù)更好點(diǎn)。這種方 法也是被斃了。 再次深度GOOGLE,發(fā)現(xiàn)了一個(gè)老外寫(xiě)的如下代碼:
本來(lái)以為IE和firefox中對(duì)iframe的事件這部分定義不一樣,回頭去再去看看了HTML4.0中關(guān)于iframe的定義,果真是 iframe上面就沒(méi)有任何事件的定義,看來(lái)是IE順手給加上的。firefox號(hào)稱(chēng)最符合html標(biāo)準(zhǔn),那么寫(xiě)在iframe上的“事件”沒(méi)有任何響 應(yīng),自然也是合情合理的。DHTML手冊(cè)上有一句話(huà),由于沒(méi)有“window”元素,body 元素將作為下列 window 對(duì)象事件的宿主:onblur, onbeforeunload, onfocus, onload 和 onunload??蒆TML4.0里面body是有這兩個(gè)事件的,所以也就不難解釋為什么用腳本給iframe的contentWindow掛上事件就 可以觸發(fā)了,實(shí)際上這個(gè)事件是來(lái)自于contentWindow里面的body元素。 事情到這里還算是比較滿(mǎn)意了,可是想想就因?yàn)橐粋€(gè)瀏覽器不兼容的問(wèn)題導(dǎo)致我花了老半天時(shí)間,真的很窩火。 該文章在 2013/7/11 1:01:51 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |