【发布时间】:2010-08-21 01:44:37
【问题描述】:
我在 facebook 流发布时遇到了间歇性问题。当调用流发布时,模态占位符会弹出“正在加载...”,但通常不会加载。由于问题来来去去,我一直认为 facebook 本身就是问题所在。如果传入了无效参数并且我没有看到任何失败的请求或 javascript 错误,则不会出现预期的模态错误消息。对于造成这种情况的原因,我真的没有任何线索,我们只知道它会导致发布丢失的比例非常高。
我的同事认为 chrome 的失败比其他浏览器更频繁,但我在每个浏览器环境中都看到了这种情况。
有问题的代码位于 FBML 画布上的 iframe 中,我使用的是当前和最新的 JS SDK。以下 JS 库正在使用中:
这是应用生成的所有流发布的包装器:
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