2016-12-01 61 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

相关问题