RequireJS异步!谷歌客户端API插件 - 加载超时?

时间:2014-01-10 00:31:57

标签: javascript asynchronous requirejs

有些客户未能在生产环境中加载Google API,但我无法找到我的代码有任何问题。

这就是我所拥有的:

//  Load Google's JavaScript Client API using requireJS !async plugin.
//  You can learn more about the async plugin here: https://github.com/millermedeiros/requirejs-plugins/blob/master/src/async.js
define([
    'async!https://apis.google.com/js/client.js!onload'
], function () {
    'use strict';

    console.log("googleAPI has loaded", window.gapi, window.gapi.client);

    return window.gapi;
});

我从Load async resource with requirejs timeout

中提取了这些信息

显示的错误消息是:

  

未捕获错误:模块的加载超时:   异步!https://apis.google.com/js/client.js!onload_unnormalized2,async!https://apis.google.com/js/client.js!onload   http://requirejs.org/docs/errors.html#timeout

此代码不会在本地产生任何问题。加载很好。

我调试问题的第一步是将requireConfig中的waitMinutes从7增加到90.我想也许很多人的连接速度很慢:

define(function () {

    require.config({

        baseUrl: 'js/',

        enforceDefine: true,

        //  I'm seeing load timeouts on in googleAPI -- seeing if increasing wait time helps.
        waitSeconds: 90,
        ...
    });
});

这似乎不会影响这个问题。我仍然看到许多客户报告了一个问题。

在这种情况下,我可以使用哪些其他调试选项?感谢

1 个答案:

答案 0 :(得分:0)

因此,在Internet Explorer 8中尝试调试我的应用程序时遇到了类似的问题,也许我的体验类似于您的客户'。

对我来说,我发现我收到超时错误,因为我的测试浏览器由于过时的根证书而无法通过https检索资源。我在运行Windows 7的虚拟机中进行了所有Internet Explorer测试。当我尝试加载应用程序时,我收到了您在帖子中提到的相同错误:

Uncaught Error: Load timeout for modules:
async!https://apis.google.com/js/client.js!onload_unnormalized2,async!https://apis.google.com/js/client.js!onload http://requirejs.org/docs/errors.html#timeout

我手动尝试了网址,并被带到了“不受信任的证书”中。我浏览器上的警告页面。这让我很困惑,但是后来我发现我的Windows操作系统上的根证书已经过时,导致https握手失败。异步插件似乎消耗了身份验证异常,只是等待某些东西神奇地经历导致超时错误。

我发现的解决方案如下:

  1. 更新操作系统的根证书
  2. 将浏览器的安全属性更改为不需要证书身份验证
  3. 至于进一步调试的建议,我有两个想法:

    1. 尝试尽可能高地设置浏览器的安全属性,看看是否可以重新创建问题(或者只是暂时删除本地证书)
    2. 要求您的客户将浏览器的安全属性设置得尽可能低,确保禁用证书身份验证要求,并询问他们是否仍有问题。 (如果他们的问题消失了,他们可能需要手动更新他们的本地证书)