2012-09-15 40 views
1

我試着尋找答案,這是我的第一篇文章,所以如果我以某種方式搞砸,請耐心等待。在文檔更改時運行js?

基本上我的問題是這樣的:我正在爲使用jQuery的Chrome編寫擴展。我有另一個擴展,每10秒發一個定時的$ .ajax()請求。我需要找到一種方法來運行我的代碼,每次定時ajax請求和它的回調函數完成。爲我自己的腳本設置一個計時器是可以完成的,儘管這樣做有點半途而廢,並且效果不佳。

的問題由此可以說明:

//extension 1 
function timedFunc() { 
    setTimeout(doStuff, 10000); 
}; 
timedFunc(); 

//extension 2 
//code to be run every time doStuff completes 

我覺得有可能是一個非常基本的解決這個問題,但我欣賞的幫助。

+0

看看[jQuery的deffereds ](http://api.jquery.com/category/deferred-object/)。 – elclanrs

+0

你試過&.ajax成功功能嗎? – Ashirvad

+0

這個想法是讓我的腳本與其他腳本的定時頁面更新兼容。我必須使用它,但是我不能直接訪問該功能,因爲它們是獨立的擴展。我總是可以自己做10.1秒鐘的計時器,但這不是很好的做法,我想知道是否有合法的方法來做到這一點。 – user1674992

回答

0

有(事件)DOMSubtreeModified。 但它已被棄用,所以在此時實際上只有解決方法可用。

Why is the DOMSubtreeModified event deprecated in DOM level 3?

我不能,因爲它甚至還沒有在所有的瀏覽器中實現利用這一事件提醒。

但是你可以做什麼(容易)只是觸發你所有的ajax調用你自己的事件!

例子:

火的事件時(任何)AJAX調用完成:

$(document).ajaxComplete(function() { 
    $(document).trigger('domChanged'); 
} 

,聽它:

$(document).on('domChanged',function() { 
    alert("i changed the DOM tree!"); 
}); 

BTW:

採取您剛纔想要對ajax調用做出反應...只需使用.ajaxComplete()事件:

http://api.jquery.com/ajaxComplete/

+0

.ajaxComplete()不起作用,因爲它是一個不同的擴展名。這些功能無法互相溝通或傾聽,所以我只能找到一種方法來監聽文檔更改。 – user1674992

+0

那麼你可能必須在你的ajax調用的成功函數中觸發事件。也許把它們包裝成一個函數? –

+0

這是兩種不同的擴展名;因此,我無法修改其他腳本所做的任何操作。另一個不是由我寫的。整個問題是爲了我的腳本與所討論的腳本的兼容性。它們在兩個不同的上下文中操作,所以我不能聽Ajax調用或任何東西 - 我唯一能做的就是檢查函數所做的更改或任何類型的更改。我只需要一種方法來聽取所述更改,如document.change或其他內容。聽起來好像沒有真正的解決方案來解決這個問題...... – user1674992

0

我真的不明白你想說什麼,但我也明白你的問題在標題所以這裏是我謙虛的回答:

// a global variable for the documents content 
var content=document.documentElement.innerHTML; 

// return true if the document content has changed 
function documentChanged(){ 
return content==document.documentElement.innerHTML; 
}