我得到一个TypeError时,试图推迟Jquery,我如何克服这一点



我的问题是基于这个主题:可能推迟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();部分有什么问题?

successgetScript的第二个参数。但是您没有为大多数getScript调用提供第二个参数。

如果您希望success参数是可选的,那么更改:

success();

:

success && success();

最新更新