有没有办法检测 Facebook Javascript SDK 是否加载成功?

2023-12-25

我使用 Facebook 作为我网站的会员系统。它使用代码生成登录控件,允许用户通过 Facebook 帐户登录。如果他们已经是会员,则基本上只需单击一下,如果不是会员,则只需单击 2 次(用于授予权限)。

但我遇到了问题...反馈表明登录按钮并不总是正确加载。它没有加载 facebook 登录控件,而是简单地(以文本形式)声明“通过 facebook 登录”——如果控件加载成功,登录按钮就会显示该内容。

测试表明,当 facebook javascript SDK 无法完全加载(无论出于何种原因)时,就会发生这种情况。我见过 url 中的 # 阻止 SDK 加载的实例。

为了更好地支持这个问题,我将如何检测 facebook javascript SDK 是否已加载并准备就绪?这样,如果失败,我可以为用户留下某种注释。

以下是当前将其添加到页面的方式:

<script>
window.fbAsyncInit = function () {
FB.init({
  appId: '***************',
  status: true,
  cookie: true,
  xfbml: true
});
FB.Event.subscribe('auth.login', function (response) {
  window.location.reload();
});

};
(function () {
  var e = document.createElement('script'); e.async = true;
  e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
  document.getElementById('fb-root').appendChild(e);
} ());

</script>

你应该加载异步 JavaScript 库 http://developers.facebook.com/docs/reference/javascript/并将所有 FB 相关功能放入window.fbAsyncInit方法:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'YOUR_APP_ID', // App ID
      channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });

    // Additional initialization code here
  };

  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));
</script>

此代码异步加载 SDK,因此不会阻止加载 页面的其他元素。这对于确保 为用户和 SEO 机器人快速加载页面。

上面代码中的 URL 是与协议相关的。这让 浏览器通过与客户端相同的协议(HTTP 或 HTTPS)加载 SDK 包含页面,这将防止“不安全内容”警告。

函数分配给window.fbAsyncInit一旦 SDK 运行 已加载。加载 SDK 后要运行的任何代码 应放置在该函数内并在调用之后FB.init。 例如,这是您测试登录状态的地方 https://i.stack.imgur.com/O9FfD.jpg的 用户或订阅任何 Facebook 活动 http://github.com/facebook/php-sdk您的应用程序是 感兴趣的。

一个简单的例子如下:

<div id="fb-root"></div>
<script>
  var isLoaded = false;
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'YOUR_APP_ID', // App ID
      channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });
    isLoaded = true;

    // Additional initialization code here
  };

  function checkIfLoaded() {
    if(isLoaded) console.log("LOADED!");
    else console.log("NOT YET!");

    return false;
  }

  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));
</script>
<a href="#" onclick="checkIfLoaded();">Check</a>

enter image description here
(Just clicked the check link a couple of times)


请注意,您仍然可以在服务器端构建登录链接并WITHOUTJavaScript。使用示例PHP-SDK http://github.com/facebook/php-sdk:

$loginUrl = $facebook->getLoginUrl();
...
...
<a href="<?php echo $loginUrl; ?>">
    <img src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif">
</a>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法检测 Facebook Javascript SDK 是否加载成功? 的相关文章

随机推荐

  • POD全局对象初始化

    我今天被虫子咬了 问 C 律师的问题 让我们考虑以下来源 struct MyPod short m short const char const m string MyPod myArrayOfPod 1 Hello int main in
  • RxJava - 将列表的结果映射到另一个列表

    我想将列表中的每个对象转换为另一个对象 但这样做时我的代码坚持将它们转换回列表 override fun myFunction LiveData
  • 为什么我无法在 Mac OSX Lion 上安装 Ruby 1.9.2? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我尝试在装有 OSX Lion 10 7 2 的全新 MacBook Air 上安装 Ruby 1 9 2 但在安装过程中不断收到错误消息 我是 Ru
  • 是否有可以将 PNG 文件转换为 PDF 的 .NET 库?

    我有一个应用程序 需要将 PNG 文件即时转换为 PDF 现有的图书馆可以做到这一点吗 我希望 PDF 看起来与 PNG 完全一样 没有多余的边距 没有边框等 我正在使用 NET 4 0 编辑 我尝试了 iTextSharp 效果很好 这是
  • Sharepoint PeopleEditor:如何找出返回的用户/组类型?

    我有一个人物编辑器
  • 如何将键值元组数组转换为对象

    我有一个数组 cardType iDEBIT txnAmount 17 64 txnId 20181 txnType Purchase txnDate 2015 08 13 21 50 04 respCode 0 isoCode 0 aut
  • 在 Asp.net Identity MVC 5 中创建角色

    关于使用新的 Asp net 身份安全框架的文档非常少 我已经拼凑了我可以尝试创建一个新角色并向其中添加一个用户的内容 我尝试了以下方法 在 ASP NET Identity 中添加角色 https stackoverflow com qu
  • 使用 new Image() 时 JavaScript 中的内存泄漏

    我似乎有内存泄漏 是由于在 javascript 脚本中使用 new Image 引起的 如果我在 Windows 资源监视器中查看已使用的物理内存 我会在加载页面时获得预期的内存使用量增加 因为它使用以下方式加载一些相当大的图像 var
  • htaccess 重写 URL 不适用于 codeigniter 代码

    我正在尝试重写 URLS 以便 foo gt index php index php 由 codeigniter 3 提供支持 bar php 是一个独立的 php 文件 这是我的 htaccess 中的片段 Test 1 Bar php
  • 如何完美同步两个或多个html5视频标签?

    有没有办法让两个或更多 最好是三个 html5标签同时播放并完美同步 如果我有一个视频的三个图块 我希望它们作为一个大视频出现在浏览器中 他们需要成为完美同步 甚至没有最小的视觉 垂直提示表明它们是平铺的 不幸的是我无法使用 MediaCo
  • 有没有办法检查 NumPy 数组是否共享相同的数据?

    我的印象是 在 NumPy 中 两个数组可以共享相同的内存 举个例子 import numpy as np a np arange 27 b a reshape 3 3 3 a 0 5000 print b 0 0 0 5000 Some
  • 运行 Quartz.NET 嵌入式或作为 Windows 服务的优缺点

    我想将quartz调度添加到ASP NET应用程序中 它将用于发送排队的电子邮件 将quartz net 作为 Windows 服务运行与嵌入式相比有何优缺点 我主要关心的是嵌入模式下的 Quartz NET 如何处理 IIS 中可变数量的
  • VSCode - 保存时禁用所有自动格式化

    我正在编辑别人的代码 我只想更改 9000 行文件中的 1 行 但每次保存时 VS Code 都会格式化整个文件并删除所有尾随空格 这是一个禁忌 因为当我把它推上去时 审阅者将不知道该看哪一行 我尝试禁用 prettier 将所有文件添加到
  • iPhone + Drupal + JSON RPC 服务器问题

    我不知道如何使用 Obj C 发布 JSON RPC 请求 谁能帮我 到目前为止我有 responseData NSMutableData data retain NSMutableURLRequest request NSMutableU
  • 使用 getNodeSet 解析 XML - 识别缺失的标签

    我正在解析 XML 文件getNodeSet 假设我有一个来自书店的 XML 文件 其中列出了 4 本书 但其中一本书缺少 作者 标签 如果我使用以下方法解析 XML 中的标签 authors data nodes 2 lt getNode
  • android edittext的最小值和最大值

    我正在开发一个android应用程序 实际上我需要为编辑文本条目设置最小值和最大值我的最小值是18 最大值是65 我做了这个的确切代码 package com test import android text InputFilter imp
  • CSS 按钮在 Google Chrome 中不起作用?

    我正在为一家电影公司的网站制作一个主页 它有一个带有悬停效果的 CSS 按钮 一旦准备好就会打开一个灯箱 目前我只是将其设置为 href 作为一个占位符 直到我准备好实现灯箱 还有一个向下箭头的小图像 链接设置为尚未出现在页面上的锚点 这两
  • ios7 UIWebView Youtube 视频

    我有一个 UIWebView 子类 用来播放 youtube 和本地视频 在iOS6下完美运行 在升级到 iOS7 的过程中 我遇到了一个问题 我真的不知道从哪里开始 虽然子类似乎仍然可以在 iOS7 模拟器上播放 youtube 和本地视
  • 在通用方法中将值转换为 T

    我有一个破旧的属性映射的界面 interface IPropertyMap bool Exists string key int GetInt string key string GetString string key etc 我想创建一
  • 有没有办法检测 Facebook Javascript SDK 是否加载成功?

    我使用 Facebook 作为我网站的会员系统 它使用代码生成登录控件 允许用户通过 Facebook 帐户登录 如果他们已经是会员 则基本上只需单击一下 如果不是会员 则只需单击 2 次 用于授予权限 但我遇到了问题 反馈表明登录按钮并不