2017-06-14 24 views
2

我是一个javascript和chrome devtools菜鸟。我们有一个内容如下的页面:如何知道Chrome何时执行外部脚本?

<head> 
.. 
<script type="text/javascript" src=”path/to/some/external/script1.js> 
.. 
</head> 

<body> 
… some HTML 
<script type="text/javascript”> 
..some inline javascript code here 
</script> 
...some more HTML 
<script type="text/javascript”> 
..some more inline javascript code here 
</script> 
</body> 

我的理解是,浏览器将按照它在页面上显示的顺序执行javascript。当浏览器执行JS时,我可以让浏览器在不修改script.js的情况下打印一条消息,例如“现在执行script.js”

+0

你知道外部脚本里面有什么吗? –

+0

@收割者,不,我不知道。我将无法修改外部脚本。 – user674669

+0

也许检查一下脚本的源代码,看看它是否会将任何内容导出到窗口对象?如果是这样,那么你可以检查它是否已经加载。 –

回答

1

您可以做的唯一事情就是将<script>标记放在它的正下方,并在那里运行代码。

+0

请您详细说明。把脚本标签放在哪里?我只想知道脚本执行的顺序 – user674669

+1

@ user674669“在它下面”。正如'

1

使用MutationObserver,在<head>

var observer = new MutationObserver(function (mutations) { 
     mutations.forEach(function (mutation) { 
      if (mutation.type == 'childList') { 
       [ ].filter.call(mutation.addedNodes, function (node) { 
        return node.nodeName == 'SCRIPT' && node.src.length; 
       }).forEach(function (script) { 
        script.addEventListener('load', function() { 
         console.log('finished loading', script.src); 
        }); 
       }); 
      } 
     }); 
    }); 
    var config = { subtree: true, childList: true }; 
    var target = document; 
    observer.observe(target, config); 

虽然创建以下联脚本作为第一个标签,这会告诉你,当负载事件触发,我不知道如何这涉及到脚本是运行

初步测试(在Firefox)建议的负载事件触发的代码运行后 - 你的里程可能会有所不同

通常的互联网爆炸警告 - 只适用于IE11 - 对于IE9/IE10,你可以用DOMSubtreeModified事件做些事情,尽管我很确定这样做会很痛苦。对于IE8及更早版本,我会推荐一条嘲讽消息,告诉用户停止使用垃圾浏览器:p