谷歌登录gapi未定义

2023-11-24

我正在尝试在我的网站上启用谷歌登录。该按钮有效,与我的帐户同步,但我无法从谷歌访问用户ID。这就是我的想法。

 <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';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(po, s);
      })();
      </script>

这就是我试图获取用户 ID 的地方。在控制台中我收到错误消息Uncaught ReferenceError: gapi is not defined.我以为我在打电话gapi在上面的源码中。任何帮助或建议将不胜感激。

$('document').ready(function(){
        var request = gapi.client.plus.people.get({
      'userId' : 'me'
    });

    request.execute(function(resp) {
      console.log('ID: ' + resp.id);
      console.log('Display Name: ' + resp.displayName);
      console.log('Image URL: ' + resp.image.url);
      console.log('Profile URL: ' + resp.url);
    });
});

你的代码正在调用gapi.client.plus.people.get加载google api库之前的方法https://plus.google.com/js/client:plusone.js。因此,您会收到“gapi is not Defined”错误。

工作态度——

  1. 为什么它不工作?

我们正在呼唤https://plus.google.com/js/client:plusone.js异步(非阻塞)以提高性能。使用异步 javascript 文件加载,您无法在正文加载时调用igapi 方法。

    <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';
            var s = document.getElementsByTagName('script')[0];
            s.parentNode.insertBefore(po, s);
    </script>
  1. 要进行 api 调用,您首先必须知道 javascript 文件已成功加载。
  2. 为此,您必须使用回调来调用方法。https://apis.google.com/js/client:plusone.js?onload=makeAPICall

  3. 编写一个api请求并在回调方法中执行它以获取数据。

检查下面的示例 -

    <html>
    <head></head>
    <body>
    <span id="signinButton">
      <span
        class="g-signin"
        data-callback="signinCallback" 
        data-clientid="YOUR CLIENT ID.apps.googleusercontent.com"
        data-cookiepolicy="single_host_origin"
        data-scope="https://www.googleapis.com/auth/plus.login">
      </span>
    </span>
    <script type="text/javascript">      
      (function() {
         var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
         po.src = 'https://apis.google.com/js/client:plusone.js?onload=signinCallback';
         var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
      })();
      function signinCallback(authResult) {
            if (authResult['status']['signed_in']) {
                    document.getElementById('signinButton').setAttribute('style', 'display: none');
                        makeAPICall();
            } else {
                console.log('Sign-in state: ' + authResult['error']);
            }
      }
            function makeAPICall(){
            gapi.client.load('plus', 'v1', function() {
              var request = gapi.client.plus.people.get({
                'userId': 'me'
              });
              request.execute(function (resp){
                console.log(resp);
                if(resp.id){
                  console.log('ID: ' + resp.id);
                }
                if(resp.displayName){
                  console.log('Display Name: ' + resp.displayName);
                }
                if(resp.image && resp.image.url){
                  console.log('Image URL: ' + resp.image.url);
                }
                if(resp.url){
                  console.log('Profile URL: ' + resp.url);
                }
              });
           });
      }
    </script>
    </body>
    </html>

结论:在加载异步客户端库之前调用 javascript API。

To avoid "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.". Call makeAPICall() method only when user is logged in not on every request.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谷歌登录gapi未定义 的相关文章

  • 如何在图像上叠加徽标?使用CSS

    正如您所看到的 徽标显示在背景图像上方 但我希望它位于背景图像的中心 这是我的标题 背景需要从页面顶部开始并在菜单之前结束 徽标需要显示在背景图像的中央 我已经尝试了很多 但也许有人遇到了类似的问题 可以帮助我解决这个问题 这张图片显示它几
  • 仅当 url 以 www 为前缀时才会发生 CORS 错误

    我目前遇到一个关于 CORS 跨源资源共享 的问题 奇怪的是 只有当我使用 www url 前缀时 才会出现这种情况 例如 当我使用以下网址访问我的网站时 http example com index http example com in
  • 匹配CSS的正则表达式“<属性>:<值>”

    我从以下位置检索了 CSS 规则document styleSheets现在我正在寻找提取它的属性和值 cssText expl position absolute background color rgb 204 204 204 max
  • console.log 是如何工作的?

    第一个例子 在以下示例中 http jsfiddle net maniator ScTAW 4 http jsfiddle net maniator ScTAW 4 我有这个js var storage function var store
  • 添加数组的总和。显示1个输出

    更新 这个问题的答案如下 感谢在不同线程上进行的 dougtesting 将数组相加 显示总和 https stackoverflow com questions 45724641 add array together display su
  • 如何绕过 IE8 对 data:uri Base64 编码的 32k 限制?

    我需要向浏览器发送包含 1920x1080 png 的 html 响应 这是一个 html 查询截取的屏幕截图 我对图像进行 base64 编码 并将其作为 text html 内容类型嵌入发送 一些简单的事情 比如 Whatever im
  • 如何在 vuejs 中防止/停止点击传播

    我有一个递归列表 树 每个元素都有一个 click sayHello el id 现在的问题是 因为它是一个嵌套列表 例如 list element 0 01 list el 1 01 list el 2 01 list el 1 02 l
  • 一个输入字段,多个名称

    在 HTML 表单中 如何从一个输入字段获取两个姓名 是否可以通过隐藏的输入字段 如何 我试图使隐藏字段值动态等于非隐藏字段值 这样无论用户写什么 它们都相等 但我确信它不起作用 而不是像这样的东西是否会起作用工作 Here http ww
  • 图像未完整显示在身体背景上

    例子 http jsbin com opokev 20 http jsbin com opokev 20 完整图片 http i53 tinypic com 347a8uu jpg http i53 tinypic com 347a8uu
  • 有什么方法可以安全地在浏览器中显示视频

    有什么方法可以安全地在浏览器中显示视频 就像他的安全措施之一 视频无法下载 谢谢 我想您的意思是您不希望您的视频被下载或复制 如果是这样 那么阻止人们下载视频或多或少是不可能的 甚至有很多工具可以从 YouTube 等大型提供商那里下载 因
  • 如何检查字符串中是否存在阿拉伯字符(javascript)

    如何用javascript语言检查字符串中是否存在阿拉伯字符 根据维基百科 http en wikipedia org wiki Basic Multilingual Plane 阿拉伯字符属于 Unicode 范围 0600 06FF 因
  • 将 JSON 字符串传递给 Django 模板

    我一直在用头撞墙 试图找出为什么我无法将从 Django 模型生成的 JSON 字符串传递到模板的 javascript 静态文件中 事实证明 问题不在模型级别 使用serializers serialize 在脚本本身中放入相同的字符串将
  • d3 序数尺度的映射

    我正在使用 D3 的序数比例将数字映射到颜色 我用过这个 color d3 scale ordinal range 1f77b4 ff7f0e 2ca02c d62728 9467bd 8c564b e377c2 domain 0 6 co
  • ActiveX 日历控件在 Windows 7 中不起作用

    我们有一个经典的 ASP 应用程序 它使用以下日历对象
  • 使用 System.js 导入 Typescript 编译的模块时出错

    我最近正在学习使用 system js 导入由 Typescript 编译的模块 这些模块之前是为 require js 编译的 并且工作正常 但是合并到system js时 应用时无法导入模块系统生产 js 控制台说 Uncaught i
  • 在 wkwebview 中启用摄像头和麦克风访问

    我有一个针对移动设备优化的网络应用程序 它利用getUserMedia访问网络摄像头和麦克风资源 我正在将这个应用程序包装在WKWebView因为我想提供原生应用程序体验 我知道 iOS 不允许通过浏览器访问相机 但是有什么方法可以使用本机
  • 在成功回调之前修改 JSONP 结果

    我想从外部服务加载一些 JSON 数据 然而 它提供 foo bar useful 而我真正关心的是 有用 的部分 我需要将那部分传递给success打回来 我正在尝试使用Deferred一次从多个数据源加载 类似this https st
  • 在 gulp 和 browsersync 问题中观看新文件

    我使用 browsersync 在文件更改时重新加载浏览器 而且它工作完美 但是当我创建新文件 例如 html scss js 时 bowsersync 不起作用 如何解决这个问题 gulpjs Browser Sync gulp task
  • 在 Mobile Safari 中点击

    敲击
  • Twitter 引导选项卡和 JavaScript 事件

    我正在一个项目中使用 twitter bootstrap 特别是它的选项卡功能 http twitter github com bootstrap javascript html tabs http twitter github com b

随机推荐

  • 计算字符串在字符串中出现的次数[重复]

    这个问题在这里已经有答案了 我只是有一个看起来像这样的字符串 7 真 NA 假 67 假 NA 假 5 假 NA 假 5 假 NA 假 我想做的就是计算字符串出现了多少次 true 出现在该字符串中 我感觉答案是这样的String Coun
  • Python - 如何使用模块的别名来导入其子模块?

    我的模块名称很长 我想避免在文档中多次输入它 我可以简单地做import long ass module name as lamn并这样称呼它 但是 该模块有许多我也希望导入和使用的子模块 在这种情况下我将无法写import lamn su
  • max() 函数如何处理 python 中的字符串列表?

    我有一个清单 list1 123 xyz zara abc print Max value element max list1 它给 Max value element zara 另请解释它如何对字符串列表和数字列表进行比较 This is
  • 使用 ExcelDataReader 和 Epplus 访问受保护的 Excel 文件

    标题几乎说明了一切 寻找一种使用 ExcelDataReader 和 Epplus 访问受密码保护的 Excel 文件的方法 找不到正确的答案 如果使用 ExcelDataReader 我的代码如下所示 excelStream File O
  • 如何在 SOLR 中索引文档?

    我在 Ubuntu 10 04 上运行 Solr 1 4 通过 apt get solr tomcat 安装 它似乎工作正常 不过 我很难找到有关如何索引文档的任何连贯信息 我是 SOLR 新手 所以请耐心等待 我有一个已安装的 Windo
  • 天蓝色资源管理器服务总线提供商?

    有 ServiceBus 提供商这样的东西吗 作为我的应用程序的一部分 我想包含 SB 命名空间 主题和订阅 您是否期望使用 ARM 部署网站 并使用服务接口来编写其他支持功能的脚本 现在有一个服务总线提供商 样本模板 apiVersion
  • 如果“&String”没有实现“Into”,为什么这些实现会发生冲突?

    我问了一个相关问题关于为什么没有实施From lt String gt for String 我现在想创建自己的特质 如下所示 derive Debug struct MyStruct String impl MyStruct fn new
  • 如何知道谷歌帐户是否在谷歌应用程序域下?

    我正在开发一个应用程序 允许用户将他们的云端硬盘文件分享给朋友 但是Google App帐户存在问题 例如 email protected 其中的文件不能与不在该域下的人共享 尽管共享策略可以由管理员更改somedomain com 但我不
  • 设置 Java 编译器合规级别

    我需要在命令行上编译一个Java程序 并且我试图将编译器级别设置为较低的级别 1 6 我尝试过这样但没有成功 javac 1 6 Hello java Use source and target选项 javac target 1 6 sou
  • 如何从对象数组中删除所有重复项?

    我有一个包含对象数组的对象 obj obj arr new Array obj arr push place here name stuff obj arr push place there name morestuff obj arr p
  • 无法在 Rider 中使用 .NET Standard 2.0 Lib 加载 Xamarin Forms 项目

    TL DR Rider 是否支持具有 NET Standard 库 2 0 的 Xamarin Forms 项目 我使用空白表单应用程序多平台向导在 Visual Studio 2017 3 Windows 中创建了一个小型 Xamarin
  • 将数字转换为日期[重复]

    这个问题在这里已经有答案了 我有一张表 其中一列的日期格式为20130109或无空格的 YearMonday 我正在尝试绘制这些点的图表 由于这种奇怪的间距 最终在图表中出现很大的间隙 因此想要将这些数字转换为日期 我一直在尝试使用as D
  • 从 nlme 摘要中提取随机效应

    我可以使用以下命令从 nlme 摘要中提取固定效果summary fm1 却苦于如何获得Random effects 部分 fm1 lt lme distance age Orthodont random age Subject summa
  • 如何在布局中使用自己的视图?

    我创建了一个这样的类 public final class MyView extends View public MyView Context context AttributeSet attrs super context attrs 然
  • 蟒蛇 |异步IO |类型错误:需要一个协程

    我正在尝试使用 asyncio 进行 python 协程编程 这是我的代码 import asyncio async def coro function return 2 2 async def get return await coro
  • 如何在 POSIX C 中枚举连接到一台机器的所有 IP 地址?

    背景 我正在编写一个建立传出 TCP IP 连接的守护程序 它将在具有多个 非环回 IP 地址的计算机上运行 我希望用户能够在守护程序的配置文件中指定用于传出连接的 IP 地址 或者 使用全部 这些地址将轮流使用 每个连接都从最近最少使用的
  • C++ 类中的重载运算符 <<

    我有一个使用结构的类 我想重载该结构的 typedef struct my struct t int a char c my struct class My Class public My Class friend ostream oper
  • 是否可以在 iOS 9 上将 iPad 应用程序设置为不进行多任务处理

    我有一个大型应用程序 需要一些时间来针对 iOS9 进行优化 编辑 我担心的是当应用程序窗口大小减小时 所有 UI 都会被挤在一起 所以我的问题是 有什么方法可以强制应用程序全屏显示吗 要为您的应用程序选择退出 禁用 多任务处理 选择您的目
  • Random.nextGaussian() 的问题

    Random nextGaussian 应该给出均值 0 和标准差 1 的随机数 它生成的许多数字都超出了 1 1 范围 我如何设置才能使其给出仅在 1到1范围内的正态分布随机数 均值为 0 标准差为 1 的高斯分布意味着分布的平均值为 0
  • 谷歌登录gapi未定义

    我正在尝试在我的网站上启用谷歌登录 该按钮有效 与我的帐户同步 但我无法从谷歌访问用户ID 这就是我的想法