我使用基於this page的腳本標記長輪詢技術實現Comet。繼我的previous question後,我已經完成了所有工作,除了一個煩惱,只發生在Firefox。Firefox不執行一個動態加載的<script>元素,直到加載另一個元素
在初始頁面加載我的Comet客戶端的JavaScript發送兩個請求到彗星服務器(在動態生成<script>
標籤被添加到DOM的形式):
get_messages
- 這是正在進行的調查來自應用程序的消息。initialise
- 這是啓動時的一次性請求。
這兩個發生在同一時間 - 也就是說,他們兩個的<script>
標籤存在於DOM相同。 (我可以在Firebug DOM檢查器中看到它們)。服務器立即發送一些腳本作爲對initialise
請求的響應,但它不會發送任何請求給get_messages
請求,除非實際上有消息,這可能需要一段時間。
在Firefox 3.5中<script>
標記爲initialise
請求返回的腳本沒有得到執行,直到其他<script>
標記(get_messages
)還加載!在Chrome 3和IE 8中,這種方式運行良好 - 只要收到腳本,腳本就會立即執行。
爲什麼Firefox會這樣做,我該如何解決?我想我可以嘗試通過在initialise
響應的同時發送一個虛擬的「消息」來解決它在服務器上的問題,但這是相當黑客。如果可能,我想理解並正確解決此問題。
謝謝,這是有道理的。不幸的是,它並不能解決我的問題,因爲get_messages請求會在任何給定的時間運行,並且可以隨時發送新的訂閱請求。 我不得不在原帖(還有一些)中提到的黑客攻擊,這讓它工作。我還沒有在IE6中測試過,但幸運的是這是給內部用戶使用的,IE6不受支持。 – EMP 2009-11-29 22:12:28