代码之家  ›  专栏  ›  技术社区  ›  Ted Scheckler

Google platform.js有时不触发onload回调

  •  1
  • Ted Scheckler  · 技术社区  · 7 年前

    如果我按特定顺序加载其他javascript源,下面的代码将不会调用platform_callback。

    <script type="text/javascript" src="//apis.google.com/js/platform.js?onload=platform_callback" async defer></script> 
    <script>
        function platform_callback() {
            console.log("callback");
        }
    </script>
    

    我很难复制这个。。。但是,如果在调用平台之后加载了很多js库(angular、moment、bootstrap),则不会触发onload回调。

    下面是一个gif,显示console.log仅在刷新十几次后的一段时间内启动: https://i.imgur.com/C5FFJhb.gif

    此html导致以下问题:

    <script src="https://apis.google.com/js/platform.js?onload=platform_callback" async defer></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.js" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular-animate.js" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular-route.js" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular-sanitize.js" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js" crossorigin="anonymous"></script>
    <script>
        function platform_callback() {
            console.log("init");
            gapi.load('auth2', function() {
                console.log("auth2");
            });
        }
    </script>
    
    1 回复  |  直到 7 年前
        1
  •  6
  •   DavidC    7 年前

    如果浏览器正忙于加载其他js文件,则加载google库后会调用当时可能未定义的平台_回调。