MozTW 討論區
https://forum.moztw.org/

在extension中操作,重讀網頁的問題
https://forum.moztw.org/viewtopic.php?f=18&t=27485
1 頁 (共 1 頁)

發表人:  clydewu [ 2009-07-21, 07:13 ]
文章主題 :  在extension中操作,重讀網頁的問題

我做了一個extension,會開啟一個新視窗chromeWindow
還有一個範例網頁

extension會做以下動作:
(1)用opener.top.getBrowser().selectedBrowser.contentWindow
取得目前的網頁視窗
(2)用opener.top.getBrowser().selectedBrowser.contentDocument
取得目前的網頁document
(3)用contentDocument.createEvent()建立事件然後觸發
(4)這個事件會刪掉某個元素id=test
(5)用contentWindow.location.reload()重新讀取網頁
(6)現在再contentDocument.getElementById('test'),要拿那個元素

哎呀~結果拿不到?

我知道其實我存取到的是XPCNativeWrapper,MDC上相關文件有看過了,不過我不清楚他到底會對我要做的事情會造成什麼影響。

但是我觀察到的是真正的"網頁"確實有reload(),網頁上的東西也真的有被刪掉然後重新出現。

但是刪除的改變有反映在XPCNativeWrapper偽裝的Document上,但是reload的改變卻沒有...

不知道有人知道這是怎麼一回事嘛?

發表人:  JackieKu [ 2009-07-21, 13:36 ]
文章主題 : 

location.reload()這個method不會等到網頁載入後才return
所以你必須用addEventListener()去處理"load"這個事件

以上只是我的猜測
不知道你的問題是不是出在這裡

發表人:  clydewu [ 2009-07-22, 23:07 ]
文章主題 :  Re: 在extension中操作,重讀網頁的問題

似乎是這個問題沒錯
看來我想的太複雜了
居然忽略了這小小點...

先謝謝點醒了!!

現在已經把主迴圈改成多個事件驅動的函式了

不過有另外幾個觀念上問題想請教一下...
1. 執行window.location.reload()後,可以馬上在window、document或body裡面放入load事件的handler嘛?
這些handler是不是可能在reload的過程中被清除掉?
或是要body.addEventListener時,body還根本不存在?

2. 是不是window.location.reload()後,等到完全載入了,才會開始body的load事件的"propagation->handler->bubbling"三步驟?
因為load事件是不會bubbling的,所以只能在propagation階段抓到。這時候抓到可以確保body已經load完畢了嘛?

3. 我有寫一個小函式,能夠用迴圈檢查經過指定秒數後才會離開迴圈
這樣的方法, 能夠用來做為"延遲指定秒數來等事件觸發"的功能嘛?

4. 那如果用setTimeout()能夠做為第3點要的功能的機制嘛?

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/