MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2024-05-23, 18:05

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 3 篇文章 ] 
發表人 內容
文章發表於 : 2009-07-21, 07:13 
離線

註冊時間: 2009-07-21, 06:56
文章: 3
我做了一個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的改變卻沒有...

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


回頂端
Mozilla/5.0 (X11; U; Linux i686; zh-TW; rv:1.9.0.11) Gecko/2009061319 Iceweasel/3.0.11 (Debian-3.0.11-1)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2009-07-21, 13:36 
離線

註冊時間: 2005-04-25, 18:44
文章: 166
location.reload()這個method不會等到網頁載入後才return
所以你必須用addEventListener()去處理"load"這個事件

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


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1
 個人資料  
引用回覆  
文章發表於 : 2009-07-22, 23:07 
離線

註冊時間: 2009-07-21, 06:56
文章: 3
似乎是這個問題沒錯
看來我想的太複雜了
居然忽略了這小小點...

先謝謝點醒了!!

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

不過有另外幾個觀念上問題想請教一下...
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點要的功能的機制嘛?


回頂端
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 3 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 2 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群