作者hermitwhite (不存在的骑士)
看板Ajax
标题[问题] 如何侦测iframe正在要求新网页
时间Wed Aug 8 17:09:05 2012
这个问题也就是要如何让iframe像IE中的onreadystatechange一样,在
开始读取的时候触发event。我不希望使用者在另开视窗(可能是按滑鼠中键
或基於浏览器设定)的时候触发,所以这个动作必须由iframe本身触发,不
能用在连结上加onclick的方式处理。
目前我会做的是定时确认:
var i = 0;
var t = setInterval(function(){
if(目标iframe.contentWindow.document.readyState != 'complete'){
显示本网页正在读取中的文字;
clearInterval(t);
}else if(i == 300){clearInterval(t)}
else{i++;}
}, 50);
这是一个在iframe读取完成前显示读取中的功能(实际的样子可以参考
我签名档的网站),当按下任何站内连结之後就会触发上面的code,然後确
认目标iframe是否开始读取。这在IE中表现如同预期,但Chrome和Firefox
中却不会很快触发;在仔细观察後发现这两个浏览器在server开始回应之前
似乎iframe的readystate都会一直处於complete状态。结果只会看到这个读
取中的文字一闪即逝;我还怕偶然网页读取太快会刚好遇到setInterval没
抓到的情况所以把时间设得很短。请问还有没有其他方法可以确认iframe正
在要求新网页,来解决这个问题呢?
--
Il Cavaliere Inesistente
http://dejavu.blogdns.org/
骑士是种一旦失去存在的意义,就会崩解消失的东西
因此他们的一生总在追求着某些事物,以维持自己的存在
如果有了存在的理由,即使是一副空的铠甲,也可以成为骑士
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.253.87.143
1F:推 eight0:window.postMessage可以跟iframe沟通 不能cross domain 08/08 17:32
2F:→ eight0:对不起我错了~ 应该是可以的 08/08 17:39
3F:→ hermitwhite:不太了解,这要怎麽用来监听iframe的状态呢? 08/08 18:12
4F:→ tyf99:<iframe onload=""> 非w3c标准,但多数浏览器都支援 08/08 20:16
5F:→ tyf99:点任何连结就让它显示读取中,onload触发後关掉讯息 08/08 20:19
6F:→ hermitwhite:第一段我有说明这个动作不能用click触发,我需要的是 08/08 20:25
7F:→ hermitwhite:在click後能马上触发、但监听对象不是被click的物件而 08/08 20:26
8F:→ hermitwhite:是iframe的动作。 08/08 20:28
9F:→ tyf99:可以试着在 iframe 加上 onloadstart listener 看看 08/08 20:30
10F:→ hermitwhite:onloadstart看起来是我要的东西,但好像iframe不行。 08/09 01:01
11F:→ tyf99:iframe.contentDocument.body 绑 click() 08/09 12:57
12F:→ tyf99:click() 触发检查 location.href 是否跟 click 之前不同 08/09 12:59
13F:→ hermitwhite:location也和readystate改变的时机一样,是回应才动呢 08/09 18:37
14F:推 eight0:试试看onunload吧 不过不要用iframe可能会比较好 08/10 01:25
15F:→ hermitwhite:其实我要做的东西现在用pjax会比较好,不过都已经开发 08/10 08:56
16F:→ hermitwhite:这麽久了有点丢不掉...加上pjax作者不愿增加对IE的支 08/10 08:57
17F:→ hermitwhite:援(我认同他对网路标准的理念但不想放掉IE这块),所 08/10 09:00
18F:→ hermitwhite:以只好在原本的基础上继续做了。 08/10 09:00
19F:→ hermitwhite:我知道了,既然IE可以跑这但不能用pjax,我乾脆就分成 08/10 09:10
20F:→ hermitwhite:IE(iframe)模式和pjax模式好了(好麻烦)... 08/10 09:10