我的问题基于这个主题:Possible to defer loading of jQuery?
我使用了该帖子的第一个答案,它很有效..大多数情况。我在FF Firebug控制台,FF开发控制台和Chrome开发控制台中收到“TypeError:success is not function”。我想问Dan Atkinson关于他的成功函数的解决方案,但由于50个代表我无法评论,所以这就是为什么这是一个单独的问题。
这是我当前的脚本(由于包含一些敏感信息而被截断):
(function() {
function getScript(url, success) {
var script = document.createElement('script');
script.src = url;
var head = document.getElementsByTagName('head')[0],
done = false;
script.onload = script.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete')) {
done = true;
success();
script.onload = script.onreadystatechange = null;
head.removeChild(script);
}
};
head.appendChild(script);
}
getScript('http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js', function() {
// YOUR CODE GOES HERE AND IS EXECUTED AFTER JQUERY LOADS
{% if template contains 'product' %}
jQuery(document).ready(function($) {
$("a.zoomer").fancybox({
padding: 0,
'titleShow': false,
overlayColor: '#000000',
overlayOpacity: 0.2,
fitToView: false,
autoSize: false,
height: 1500
});
}); {% endif %}
// script truncated
});
})();
(function() {
function getScript(url, success) {
var script = document.createElement('script');
script.src = url;
var head = document.getElementsByTagName('head')[0],
done = false;
script.onload = script.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete')) {
done = true;
success();
script.onload = script.onreadystatechange = null;
head.removeChild(script);
}
};
head.appendChild(script);
}
getScript("{{ 'jquery.fancybox.pack.js' | asset_url }}");
getScript("{{ 'slick.min.js' | asset_url }}");
getScript("{{ 'option_selection.js' | shopify_asset_url }}");
getScript("{{ 'api.jquery.js' | shopify_asset_url }}");
getScript("{{ 'jquery.tweet.js' | asset_url }}");
getScript("{{ 'scripts.js' | asset_url }}");
getScript("{{ 'jquery.lazyload.min.js' | asset_url }}");
})();
我在{code tags}中尝试获取脚本时遇到了很多麻烦,所以如果没有post验证器给我一个警告,我就无法完成整个脚本。它可能是脚本中的液体代码。
以下是我收到的错误的一些屏幕截图: http://screencast.com/t/q1idygFanob http://screencast.com/t/mKpGiEPHsA
我需要推迟jQuery和所有相关脚本,以提高Google页面速度的洞察力。它说我们需要删除渲染阻塞脚本,其中一个是jQuery。
我试图删除success();
,这使整个事情无效。我尝试了丹·阿特金森在评论if(success && getClass.call(success) == '[object Function]') { success(); }
中所说的话,但我认为我做错了。
有谁可以告诉我success();
部分有什么问题?
答案 0 :(得分:0)
success
是getScript
的第二个参数。但是你没有为大多数getScript
电话提供第二个参数。
如果您希望success
参数是可选的,请更改:
success();
为:
success && success();