2010-01-15 56 views
1

我搜索了很多,但可能我搜索錯誤的字符串。 Java小程序是投喂活位到我的網頁,Java小程序訪問我的網頁上輸入字段,並把信息加載Java小程序DOM加載

<input type="hidden" id="F1" value="Nothing Yet"> 

,然後調用JavaScript功能特徵的頁面說LivePicker(),然後將其簡單地拿起值

var ClockVal = document.getElementById("F1").value; 
document.getElementById("ICSCLOCK").innerHTML = ClockVal; 

我現在面臨的問題是,這工作得很好,但有時在Firebug的控制檯它給像LivePicker錯誤沒有定義,而LivePicker將工作完全正常的頁面,而有時候它會給F1是沒有定義,而我的時鐘將工作正常。所有這些錯誤都會在頁面加載時出現。

Java applet依次放置數據,它首先放置數據,然後調用js函數來處理它。在測試頁面上,使用最少的HTML和JS,但是當我將它集成到我的應用程序(它使用YUI中的很多組件和很多我自己的JS代碼(顯然現在已縮小))時,它會很好地工作,它會給出這些錯誤。在縮小之前,我想補充一點,這些錯誤很有可能,但是在JS和CSS縮小之後,頁面加載時間減少了一半,這些錯誤的出現也減少了一半。

我懷疑這是由於,在頁面加載時,applet嘗試操作尚未就緒的DOM。有什麼可以阻止小程序等待DOM完全加載嗎?我嘗試了window.onload和YUI的onDOMReady函數,它們似乎根本沒有任何作用。

任何人都可以幫忙嗎?

+0

我想補充,Java程序每隔1秒後,將數據,這就是爲什麼在頁面加載後,我想,在以後的週期,小程序獲取輸入域或功能,和錯誤不出現。 –

回答

0

瀏覽器應該延遲執行window.onload代碼,直到 DOM樹被創建並且所有其他外部資源完全加載並且頁面顯示在瀏覽器中後。

window.onload應該可以工作。您的小程序必須在onload事件之前運行。

作爲測試,可你下面,看看它是否改變任何東西:

  • 創建頁面隱藏「設置」字段值「假」;
  • on window.onload將「set」字段的值設置爲「true」;
  • 在你的applet中檢查「set」字段;
  • 只有在定義了「set」字段並且值爲「true」的情況下才能開始在applet中執行任務;

另一件事,不要在applet中忙着等待測試「set」字段。如果該字段未定義或爲false,則您的小應用程序不應採取任何行動。如果需要,您可以在window.onload上重新激活它。

+0

感謝您的詳細回覆。我試圖看看會發生什麼,如果我這樣做,但只是一個簡單的問題,這個隱藏的輸入元素也將在DOM中,如果它沒有被加載並且applet嘗試加載它,會發生什麼。 –

+0

我不記得在這種情況下會發生什麼;你要麼得到一個異常,要麼你得到null,這兩種情況都意味着該字段沒有被定義。你可以嘗試的另一件事(我認爲應該更簡單)就是讓applet加載並且不做任何事情。然後,在window.onload的頁面上有一個JavaScript函數,它調用applet上的一個方法來啓動它。 – 2010-01-19 12:28:50

+0

我試過了,它似乎是applet中的一些其他問題,我懷疑子線程沒有終止。我已經縮小了代碼,現在要一步一步地在applet中找到問題。請參閱我的其他線程http://stackoverflow.com/questions/2134028/terminating-java-applet-thread-on-page-unload 如果你能幫助我。 –