我的问题是基于这个主题:可能推迟jQuery的加载?
我用了那个帖子的第一个答案,它起作用了,嗯…主要是。我在FF Firebug控制台,FF开发控制台和Chrome开发控制台得到"TypeError: success is not a 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 }}");
}) ();
我有很多麻烦,试图得到我的脚本在{代码标签},所以我不能得到整个脚本过去没有post验证器给我一个警告。它可能是隐藏在脚本中的液体代码。
以下是我收到的一些错误的屏幕截图:http://screencast.com/t/q1idygFanobhttp://screencast.com/t/mKpGiEPHsA我需要推迟jQuery和所有依赖的脚本,以提高谷歌页面速度的见解。它说我们需要删除渲染阻塞脚本,其中之一就是jQuery。
我试图删除success();
,这使得整个事情不工作。我尝试了Dan Atkinson在他的评论if(success && getClass.call(success) == '[object Function]') { success(); }
中所说的,但我认为我做错了。
谁能告诉我success();
部分有什么问题?
success
是getScript
的第二个参数。但是您没有为大多数getScript
调用提供第二个参数。
如果您希望success
参数是可选的,那么更改:
success();
:
success && success();