我正在开发一个网站,使用Google JavaScript客户端库加载一些通过Google云端点暴露的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
我正在使用类似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>
这将在控制台上输出以下内容:
starting to load endpoints
SCRIPT5007: Unable to get property 'value' of undefined or null reference
proxy.html, line 7 character 51
请注意,"finished loading endpoints" 这一行永远不会被输出。
在经过漂亮的打印后,proxy.html 中相关的代码似乎是这样的,特别是 document.getElementById('root').value
,由于 document.getElementById('root')
为 null 或未定义。gapi.load('googleapis.proxy', {
callback: function () {
return window['googleapis']['server']['initWithPath']
.call(this, document.getElementById('root').value);
},
config: {
// snipped
}
});
我注意到,如果我重新加载页面,API 将成功加载,并在控制台输出以下内容:
starting to load endpoints
finished loading endpoints
我在使用本地开发服务器和托管在Google App Engine生产实例上的应用程序时,都遇到了上述问题。
有人成功地从Internet Explorer 10中调用Google Cloud Endpoints吗? 如果是这样,请问我的代码有什么缺失?
编辑:这个问题也出现在谷歌的示例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的井字游戏示例中,这个问题也存在。我在这里部署了一个副本:https://cloud-endpoints-tictactoe.appspot.com;与其他演示一样,在Chrome和Safari上运行良好,但在Internet Explorer 10中失败。
编辑4: 我仔细查看了Google提供的proxy.html。在导致错误的脚本标记下面,有一个包括id为'root'的文本区域的body。
<body>
<textarea id="root" style="display:none">/_ah/api</textarea>
<div id="lcsclient" style="position:absolute;left:-10000px;"></div>
</body>
因此,看起来谷歌需要对proxy.html进行一些更改,以确保在Internet Explorer上执行javascript之前文档已加载 - 我是正确的吗?