使用JQuery我正在从页面上加载的所有脚本中搜索并输出src属性。这是我的代码:
$('script').each(function(index, value) {
var src = $(this).attr('src');
var src = src || 'no source';
console.log(src);
}
我们正在搜索的示例脚本:
<script type='text/javascript' src='http://domain.co.uk/wp-includes/js/jquery/jquery.js?ver=1.11.0'></script>
和控制台输出将是:
http://domain.co.uk/wp-includes/js/jquery/jquery.js?ver=1.11.0
这很好用,所有这些src都在输出。但是有一个例子我得到了一个错误。当脚本将javascript直接输出到包含'src'的页面时,会出现问题。在这个例子中,我得到以下错误:Uncaught TypeError:无法读取未定义的属性'split'
我可以看到这是因为我的代码正在从qouputed javascript中获取src。我在底部包含了这个Javascript,以帮助准确显示我正在谈论的内容。
具体行是:s.src ='// api.usersnap.com/load/47134af3-5898-4c09-88c9-6aed89cfac7f.js';
并且在错误之前,console.log输出:
// api.usersnap.com/load/47134af3-5898-4c09-88c9-6aed89cfac7f.js
我认为.attr只会抓取目标元素中的属性。我如何让它做到这一点,并忽略似乎导致此错误的所有其他内容。
<script type="text/javascript" data-cfasync="false">
(function() {
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = '//api.usersnap.com/load/47134af3-5898-4c09-88c9-6aed89cfac7f.js';
var x = document.getElementsByTagName('head')[0];
x.appendChild(s);
})();
</script>
答案 0 :(得分:0)
当我尝试它时,我没有问题将src输出到页面上的所有脚本,包括你发布的代码中的脚本。
js/jquery-2.1.1.min.js script.js
//api.usersnap.com/load/47134af3-5898-4c09-88c9-6aed89cfac7f.js
我建议你将jQuery升级到 2.1.1 。我使用 Chrome Version 35 进行测试。
答案 1 :(得分:0)
找到this answer,解决错误“Uncaught TypeError:无法读取未定义的属性'split'”。
如果.attr(“class”)返回undefined,则不能在其上调用.split,因为.split是String对象的一个方法,不能在undefined上调用。您需要存储.attr(“class”)的结果,然后只有在未定义时才将其拆分。
但是我已经在本地尝试过你的代码了。
我能看到的唯一可能导致错误(取决于所使用的浏览器)的是你已经声明var src
两次。
$('script').each(function(index, value) {
var src = $(this).attr('src');
src = src || 'no source';
console.log(src);
});
答案 2 :(得分:-3)
我认为是。如果你可以创建一个小提琴我们可以说得更好,但是发生了什么attr('src')
返回undefined,然后你试图调用一个函数/属性。基本上是一个空例外。
我会在你尝试操作之前测试'src'的定义。