javascript - 为什么加载 Google+ JS 客户端时出现 "Invalid gadgets.rpc token"错误?

标签 javascript google-plus

我希望能够使用 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/

相关文章:

javascript - 调整动态加载的 MediaElementjs 视频的大小

java - 为多个 Activity 创建 GoogleApiClient

google-plus - 使用 Web Audio API 访问 YouTube 直播

javascript - 如何暂停可观察对象

node.js - 没有 Passport.js 的 Google + 身份验证

javascript - gapi.client未定义-Firefox附加SDK

java - 无法从 Google Plus API 获取数据

javascript - 如何将新行匹配为一个?

javascript - getter 'data' 在 null 上被调用

javascript - 获取可拖动元素的 ID