我希望能够使用以下JS代码拨打Google+电话:
gapi.client.plus.people.get({"userId": "me"});
在我的HTML中,我加载了以下JS源:
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=[our maps api key]&sensor=true"></script>
<script type="text/javascript" src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
<script type="text/javascript" src="biketracker.js"></script>
<script type="text/javascript" src="https://apis.google.com/js/client.js?onload=onGoogleJsClientLoaded"></script>
在biketracker.js中,我也在对Google JS进行异步加载:
(function() {
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();
加载Google JS客户端源时的回调然后加载其他三个Google API:
function onGoogleJsClientLoaded() {
console.log("onGoogleJsClientLoaded()");
gapi.client.load("biketracker", "v1", onBikeTrackerApiLoaded, endpointsRoot);
gapi.client.load("oauth2", "v2", onOAuth2Loaded);
gapi.client.load("plus", "v1", onGooglePlusClientLoaded);
}
其中第一个并非真正的Google API,而是我们在App Engine上托管开发的Google Endpoints API。忽略它。 OAuth2加载得很好。但是,Plus API给了我这些错误:
Invalid gadgets.rpc token. 2006255737 vs 542328210
Uncaught Error: m`apiproxy6892d048ac55f727a04aed9791f4e586b15e69860.4984859501703547
我找不到其他人有同样的错误。我做错了什么?
答案 0 :(得分:3)
您使用的是Google+登录,+1按钮还是各种徽章?如果您没有使用这些功能(尽管您可能应该使用社交应用程序),那么您不需要plusone.js:Google客户端库是API访问所需的,如果定义了gapi.client,您应该是能够毫无问题地加载Google+客户端库。要对此进行测试,您可以看到gapi.client.plus ...是否存在,如果存在,您可以访问Google+端点!
如果您使用的是Google+登录,则不应在自己的JS模块中执行Google API脚本的异步加载。由于超出此答案范围的原因,必须在全局范围内初始化JavaScript Google客户端库使用的某些JavaScript代码。这是导致错误的第二大可能原因。
这些错误可能不会导致您网站上的错误。 plusone.js脚本用于在屏幕上呈现各种小部件,例如Google+登录按钮,并且最有可能是您遇到的RPC错误的罪魁祸首。有时候,API可能会在第一次加载时失败,只要按钮按预期呈现就可以了。
您可能遇到客户图书馆或Google+图书馆相互竞争的竞争条件。除了plusone.js之外,尝试包括client.js你的异步加载函数,并在脚本加载时添加你的回调:
<script type="text/javascript">
(function() {
var po = document.createElement('script');
po.type = 'text/javascript'; po.async = true;
po.src = 'https://plus.google.com/js/client:plusone.js?onLoad=onGoogleJsClientLoaded';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(po, s);
})();