我希望能够使用 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,而是我们开发的 Google Endpoints API,托管在 App Engine 上。忽略它。 OAuth2 加载得很好。然而,Plus API 给了我这些错误:
Invalid gadgets.rpc token. 2006255737 vs 542328210
Uncaught Error: m`apiproxy6892d048ac55f727a04aed9791f4e586b15e69860.4984859501703547
我找不到其他人有同样的错误。我做错了什么?
最佳答案
您是否使用 Google+ 登录、+1 按钮或各种徽章?如果您没有使用这些功能(尽管如果您有社交应用程序,您可能应该这样做),那么您不需要 plusone.js:Google 客户端库是您访问 API 所需的,如果定义了igapi.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);
})();
关于javascript - 为什么加载 Google+ JS 客户端时出现 "Invalid gadgets.rpc token"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17595654/