2016-12-01 58 views
0

我有這樣一段代碼在一個網站:如何檢查腳本是否正在加載外部數據?

<div id="test"> 
    <script type="text/javascript"> 
    /*<![CDATA[*/ 
    parameter1 = 'whatever1'; 
    parameter2 = 'whatever2'; 
    parameter3 = 'whatever3'; 
    etc. 
    /*]]>*/ 
    </script> 
    <script src='external js file'></script> 
</div> 

該代碼被用來從外部源加載在該網站的圖像。當他們(無論他們是誰)正確配置外部源時,div'測試'將顯示圖像。如果不是,div將是空白的。

好吧,現在讓我們假設該網站中的另一個div必須顯示特定的內容(取決於圖像是否加載),如果不是,則顯示不同的內容。

外部信息源不可訪問/可編輯,因此無法確定它們(無論他們是誰)正在爲要加載的圖像發送數據。

那麼,有沒有一種方法可以在代碼中預測/檢測div'test'是否正在加載數據?

編輯2016年4月12日

最後我都用這個,感謝cFreed建議:

var target = document.getElementById('test'); 
var observer = new MutationObserver(function(mutations) { 
    mutations.forEach(function(mutation) { 
    //stuff; 
    });  
}); 
var config = { attributes: true, childList: true, characterData: true }; 
observer.observe(target, config); 
+0

你能展示一個外部腳本*可能會導致什麼結果的例子嗎? –

+0

你可以編輯fetcher代碼嗎?從獲取請求中監視或拋出事件是最容易的,並根據請求的狀態/結果填充第二個div,而不是試圖讓第二個div對第一個div的內容做出反應。 – TheJim01

+0

嗨ScottMarcus和TheJim01。 div'測試'代碼與http://support.pencidesign.com/forums/topic/inserting-video-on-post/ – b1919676

回答

1

您可以使用MutationObserver

這是您的情況非常簡單的應用程序。

var observerConfig = {childList: true}, // only notify when children added 
    targets = { 
     test: false, 
     ...other <div>s to observe 
    }, 
    target, elem, observer; 

for (var target in targets) { 
    elem = document.getElementById(target); 

    // create and activate an observer instance 
    observer = new MutationObserver(function(mutations) { 
    mutations.forEach(function(mutation) { 
     // here we assume that the only changes are children addition 
     // so we don't look at anything more precise 
     targets[elem] = true; 
    }); 
    observer.observe(elem, observerConfig); 
    }); 
} 

// then you can test targets['someTarget'] to know if it had been populated 
+0

中顯示的選項3非常相似,感謝cFreed。要研究你的想法(稍微提高一點,因爲我只是一個新手),我會告訴你;) – b1919676

+0

@ b1919676安靜:沒有那麼高。我甚至不知道它在一個星期前就已經存在,並且進行了一些測試,看它很容易使用。偶然之後你的問題就會出現在下面! – cFreed