无法在Internet Explorer 10上加载Google Cloud Endpoints

Gre*_*reg 13 javascript google-app-engine internet-explorer internet-explorer-10 google-cloud-endpoints

我正在使用Google JavaScript客户端库加载一些通过Google Cloud Endpoints公开的API 的网站上工作.端点是用Python开发的,但我不确定这是否是一个因素.一切都在Chrome,Firefox和Safari中运行良好,但在Internet Explorer 10上我收到此错误:

SCRIPT5007: Unable to get property 'value' of undefined or null reference 
proxy.html, line 7 character 51
Run Code Online (Sandbox Code Playgroud)

我正在使用类似于Google在其文档建议的代码加载客户端库:

<script type="text/javascript">
    Oversee.Init();
    function init() {
        console.log("starting to load endpoints");
        gapi.client.load("marketplace", "1", function() {
            console.log("finished loading endpoints");
        }, "//" + window.location.host + "/_ah/api");
    }
</script>
<script type="text/javascript" src="https://apis.google.com/js/client.js?onload=init"></script>
Run Code Online (Sandbox Code Playgroud)

这将在控制台上输出以下内容:

starting to load endpoints 
SCRIPT5007: Unable to get property 'value' of undefined or null reference 
proxy.html, line 7 character 51
Run Code Online (Sandbox Code Playgroud)

请注意,永远不会输出"已完成加载端点"这一行.

漂亮印刷后,在proxy.html问题的代码看起来是这样,特别是document.getElementById('root').value,如document.getElementById('root')为空或未定义.

gapi.load('googleapis.proxy', {
    callback: function () {
        return window['googleapis']['server']['initWithPath']
            .call(this, document.getElementById('root').value);
    },
    config: {
        // snipped
    }
});
Run Code Online (Sandbox Code Playgroud)

我注意到如果我重新加载页面,api加载成功,控制台中有以下输出:

starting to load endpoints 
finished loading endpoints 
Run Code Online (Sandbox Code Playgroud)

当我使用本地开发服务器时以及当我使用托管在生产Google App Engine实例上的应用程序时,所有这些都发生了.

有没有人设法从Internet Explorer 10成功调用Google Cloud Endpoints?如果是这样,我的代码中缺少什么?

编辑:问题也出现在Google的示例Cloud Endpoints Web应用程序中.我在这里部署了它的副本:https://cloud-endpoints-demo.appspot.com,在Internet Explorer 10上运行它时会出现同样的错误.

编辑2:我在此处创建了一个问题:https://code.google.com/p/googleappengine/issues/detail?id = 10700

编辑3:Google的TicTacToe云端点示例中也出现了问题.我在这里部署了一份副本:https://cloud-endpoints-tictactoe.appspot.com ; 与其他演示一样,它在Chrome和Safari上运行良好,但在Internet Explorer 10中以相同方式失败.

编辑4:我仔细研究了Google提供的proxy.html.在导致错误的脚本标记下面,有这个主体,它包含一个id为'root'的textarea:

<body>
    <textarea id="root" style="display:none">/_ah/api</textarea>
    <div id="lcsclient" style="position:absolute;left:-10000px;"></div>
</body>
Run Code Online (Sandbox Code Playgroud)

因此,看起来Google需要对proxy.html进行一些更改,以确保在Internet Explorer上执行javascript之前已加载文档 - 我是对的吗?

Mar*_*nds 0

肯定是 IE10 JavaScript 问题。同意空值必须来自document.getElementById('root')您指出的那样。您的页面通常不会包含此类元素,并且该名称不具有独特性。我怀疑“root”元素是由来自 Google 的另一段 JavaScript 创建的,而其他 JavaScript 代码已经(默默地)失败了。利用您强大的 Debug-Fu 朝这个方向看。抱歉,我想提供更多帮助,但这将违反微软的条款和条件(如果我不为每个实例付费,我将被禁止运行他们的软件)。

编辑:由于 proxy.html 包含有问题的 JavaScript 代码和“root”元素,Google 可以通过更改元素的顺序来纠正它。明智的是,许多作者建议将 JavaScript 放置在 html 正文底部之前。如果您能够引用自己的 proxy.html 副本,则可以在向 Google 抱怨之前自行尝试修复。