我们有一个基于浏览器的游戏,它通过AppID使用Facebook Connect,我们曾经在画布上运行相同的游戏,直到Fb Credits被引入,我们被迫关闭它.现在,我们只使用与我们自己网站上FbConnect集成的产品页面相同的方式.
今天的邮件说明了我们的案例:
如果您的Connect应用程序正在访问用户连接或要求超出年龄,电子邮件和我们的发布权限的其他权限,请删除这些请求.
(这是指此政策变更:https://developers.facebook.com/blog/post/2012/09/05/platform-updates--operation-developer-love/)
我们正在使用oauth
FbConnect scope=email,user_birthday
.这正是早期邮件中指定的内容,所以应该没问题.
一旦用户通过身份验证,我们只需致电
https://graph.facebook.com/me?access_token=...
Run Code Online (Sandbox Code Playgroud)
并阅读那里的内容.
有可能,我们不能再调用GraphAPI me
吗?它包含性别,位置和区域设置等信息...
Oauth数据包含fbuid,first/lastname和电子邮件,但它不包含年龄,我们应该被允许提出什么?
我必须https://graph.facebook.com/me?fields=birthday
明确打电话吗?
有没有人真正成功地获得"主要通过Facebook托管的桌面网络游戏"以遵守他们的新政策而无需创建新的AppID?
注意:有一些关于像Facebook这样的"9月5日政策变化"的问题:违规通知这个以及之前的许多内容都是重复的,但到目前为止我找不到任何技术层面的问题或答案.
我们有一种情况,我们需要在执行XHR/Ajax请求后在浏览器中打开一个新选项卡.
我们通过将Ajax请求设置为同步执行以保持受信任的click事件的上下文来实现此目的,这样可以正常工作.
但是,在最新的Chrome版本(36)中,当Ajax调用有一些延迟时,我们会遇到弹出警告... 2秒的延迟足以让Chrome显示弹出警告,而不是像预期的那样打开标签.代码本身正常工作,我可以多次单击该按钮,它一直有效,直到请求遇到一些延迟.然后我得到弹出警告......
是否存在应用于同步Ajax请求的超时,在此期间需要完成它以使可信事件仍然可用?
有没有办法规避这个?毕竟,呼叫已经同步并冻结其他所有内容,直到结果到来.
谢谢.
更新:我已经创建了一个JSFiddle来演示这个问题:http://jsfiddle.net/23JNw/9/
/**
* This method will give open the popup without a warning.
*/
function performSlowSyncronousRequest() {
$.ajax({
url: '/echo/html',
data: {delay: 2}, //JSfiddle will delay the answer by 2 seconds
success: function(){
window.open('http://www.thirtykingdoms.com'); //this causes the popup warning in Chrome
},
async: false
});
}
Run Code Online (Sandbox Code Playgroud) 我们面临着与mousemove连接的jQuery事件传播性能的问题:
我们有一个屏幕填充画布,需要跟踪用户是否在其上拖动鼠标,因此我们在该对象上添加了一个鼠标移动侦听器,如下所示:
ourCanvas.on('mousemove',
function(event) {
event.preventDefault();
//our drag code here
}
});
Run Code Online (Sandbox Code Playgroud)
此代码工作正常,但我们在一个测试系统上的当前Firefox(24)中遇到了严重的性能问题.分析器告诉我们,大部分时间花在了jQuery.event.dispatch()
(我们尝试了当前最新的jQuery 1.8,1.9,1.10和2.0).
我们通过在这里使用"jQuery.event.fix()"性能优化成功地减少了在dispatch()函数中花费的时间:http://bitovi.com/blog/2012/04/faster-jquery-event-fix. html但该测试系统的性能仍远低于我们的预期.
经过一些进一步的测试,我设法将其固定在系统上使用的鼠标上:它使用了1000Hz.我们将用过的鼠标切换到125Hz并且瞧瞧,性能非常好.
我们的假设是,鼠标上的高Hz率引起了很多mousemove事件,因此我们更改了上面的代码以应用事件限制,并且每隔X毫秒只调用事件处理:
var lastMove = 0;
var eventThrottle = 1;
ourCanvas.on('mousemove',
function(event) {
event.preventDefault();
var now = Date.now();
if (now > lastMove + eventThrottle) {
lastMove = now;
//our drag code here
}
}
});
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力,表现很棒.即使我们只跳过两毫秒的事件.
现在我有两个问题:
我们有其他位置将mousemove监听器连接到不同的HTML元素,我想将这个手工制作的管道添加到所有这些mousemove
处理程序,以免再次遇到问题.这在jQuery(2.0.3)中以某种方式可行吗?我已经看到preDispatch
jQuery javascript中的钩子,但是他们已经在调用fix()之后也花了一些时间,我也想保存该调用.
令我感到困惑的是,已经有2 eventThrottle
毫秒足以获得非常好的性能所以我添加了一个计数器来查看有多少事件被跳过.令人惊讶的结果是:它只跳过0-1个事件......在100ms的节流下,跳过的事件大约为60-70,所以如果每ms有少于1个mousemove事件,为什么这个代码有这样的毕竟是积极的影响?
感谢任何评论,克里斯托弗
ajax ×1
events ×1
facebook ×1
firefox ×1
javascript ×1
jquery ×1
mousemove ×1
performance ×1
permissions ×1
policy ×1
popup ×1
synchronous ×1