【问题标题】:Facebook Stream Publish Issue: Modal stuck "loading..."Facebook Stream 发布问题:模态卡住“正在加载...”
【发布时间】:2010-08-21 01:44:37
【问题描述】:

我在 facebook 流发布时遇到了间歇性问题。当调用流发布时,模态占位符会弹出“正在加载...”,但通常不会加载。由于问题来来去去,我一直认为 facebook 本身就是问题所在。如果传入了无效参数并且我没有看到任何失败的请求或 javascript 错误,则不会出现预期的模态错误消息。对于造成这种情况的原因,我真的没有任何线索,我们只知道它会导致发布丢失的比例非常高。

我的同事认为 chrome 的失败比其他浏览器更频繁,但我在每个浏览器环境中都看到了这种情况。

有问题的代码位于 FBML 画布上的 iframe 中,我使用的是当前和最新的 JS SDK。以下 JS 库正在使用中:

  • 谷歌分析
  • Facebook SDK
  • swf 对象
  • jQuery 1.4.2
  • Jquery 转储插件
  • 脸书
  • ba-调试

    这是应用生成的所有流发布的包装器:

    function streamPublish(name, caption, description, icon, href, actiontext, message, recipient, properties) {
          var attachment =  {
            'media':[{'type':'image','src':icon,'href': href}],
            'name': name,
            'caption': caption,     
            'description': description,
            'href': href
          };
          if (properties !== undefined && properties !== ''){
            attachment.properties = properties;
          }
          if (recipient === undefined || recipient === ''){
            recipient = getUserId();
          }
          FB.ui({
            method: 'stream.publish',
            'message': message,
            attachment: attachment,
            action_links: [{'text':actiontext, 'href':href}],
            target_id:recipient 
          },
          function(response) {
            if (response && response.post_id) {
              publishSuccess(response);
            } else {
              publishFail();
            }
          });
        }
    

    这已经伤害了应用程序一段时间,任何帮助线索将不胜感激。

  • 【问题讨论】:

    • 看一下firebug中的网络请求,看看有没有超时。发生这种情况时,facebook api 是否成功初始化?发生此错误时,您能否向 facebook 执行其他成功请求?
    • 其实,我确实挖得更深了,看看SDK是如何渲染流发布模式的。看起来有 2 种模式,一种带有“正在加载...”指示器,另一种带有 iframe,可在此 url 加载发布者:facebook.com/connect/prompt_feed.php 我能够重现该问题,并且确实 iframe-modal位于页面外 10000 像素处,已完全加载,等待移入。当 iframe 完成加载时必须触发一些事件,告诉 SDK 将模态框移动到位。无论这种机制是什么,都会经常失败。
    • 在我的网络代理和萤火虫之间,我看不出成功发布尝试和失败的请求/响应之间有什么区别。我很确定 api 正在正确初始化,否则我们甚至不会看到“加载”模式,因为它包含在 SDK 生成的标记中。此外,所有身份验证令牌等都很好。我很想编写自己的 iframe 模态包装器,并使用查询字符串中传递的所有参数加载 prompt_feed.php - 但这可能会浪费大量时间。
    • 我在 facebook 开发者论坛上创建了一个帖子:forum.developers.facebook.net/viewtopic.php?pid=261115#p261115
    • 更新:我将尝试将“display”参数添加到 FB.ui 并测试几天,看看是否会有所不同。查看 SDK 源代码,缺少会话将强制“弹出”模式而不是“iframe”或“对话框”。不确定每个人到底做了什么。 // 如果会话不可用,则不能使用 iframe“对话” if (!FB._session && params.display == 'dialog' && !method.loggedOutIframe) { FB.log('"dialog" 模式只能使用当用户连接时。'); params.display = '弹出窗口'; }

    标签: javascript facebook


    【解决方案1】:

    【讨论】:

    • 经典...对于这种规模和范围的公司...在生产废话方面确实可以与微软相提并论,这些废话要么在用户指导方面完全迟钝,要么只是无法正常工作(或根本无法正常工作)。庞大的好处......你可以不在乎,因为......好吧......我们要做什么?
    • 我仍然经常看到这种挂起的模态问题。
    【解决方案2】:

    我怀疑问题可能出在客户端和服务器之间的身份验证期间,因为除了第一个之外,其他所有 stream.publish 调用都有效。

    尝试在 FB.init 中将 'cookie' 设置为 false...我推断这可能会强制 init 实际联系服务器

    FB.init({
    
    ...
    
    cookie:  false,
    
    ...
    
    });
    

    尚未对其进行彻底测试,但它似乎可以正常工作。

    更新:不幸的是,它似乎无法解决所有情况

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    相关资源
    最近更新 更多