2012-06-11 82 views
1

我正在嘗試爲Twitter編寫Chrome擴展程序,並且想要修改頁面的佈局。我嘗試了很多東西,並且搜索了一些東西,但無濟於事。在Chrome擴展中運行代碼之前,如何等待Twitter趨勢加載?

我想在趨勢和頁腳之間添加div。然而,Twitter似乎用ajax生成這些元素,所以當我的代碼運行時,即使在$(document).ready函數中它們也不存在。

我得到它的唯一方法就是將我的代碼放在setTimeout函數中1-2秒。這似乎是一個相當不可靠的解決方案,所以我非常感謝這個問題的任何幫助。

在此先感謝!

回答

1

檢查每個AJAX請求後是否存在某些DOM元素並不比每隔1-2秒用setTimeout(與您一樣)檢查相同的東西好得多。

更好的方法是使用DOMNodeInserted事件。如果您將其設置正確(將其添加到正確的元素),只要您正在等待的元素被插入到DOM中,您就會收到通知。事件被解僱後,請記住將其刪除(removeEventListener),因爲突變事件以其performance issues而聞名。

+0

聽起來就像我所需要的。謝謝! – bilalq

2

要做到這一點的方法是創建一個背景頁面,然後使用chrome.extension.getBackgroundPage(). 調用它一旦ajax請求完成,你可以調整你的彈出頁面。如果您有將參數發送到後臺頁面,那麼你就必須偵聽器添加到背景頁是這樣的:Message passing:有關消息傳遞

================ 
chrome.extension.sendRequest({greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
}); 


=============== 
chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 
      sendResponse({farewell: "goodbye"}); 
    }); 

的更多信息可以在這裏找到。

如果你真的不想這樣做,你可以通過設置參數爲false來同步調用ajax請求。

xmlhttp.open("GET","url",false); 

然而,這並不是很好的做法,我會強烈建議不要it.Hope這個解決您的問題!

+0

沒有'synchronous'參數要設置爲'true',你可能的意思是將'async'參數設置爲'false'。 [請參閱參考資料](https://developer.mozilla.org/en/DOM/XMLHttpRequest/Synchronous_and_Asynchronous_Requests)。 –

+1

我的錯誤,我感到困惑。已糾正它。 – user1092042

+0

我很感激幫助。我想我可能沒有清楚地傳達我的問題。我不是提出ajax請求的人,而是Twitter本身。我嚴格修改Twitter的外觀而不使用彈出頁面。儘管如此,我打算儘快寫出另一個Chrome擴展,所以這對將來肯定會有很大的幫助。謝謝! – bilalq

相關問題