我正在尝试在我的项目中实现Facebook的注销功能。登录工作正常。但我正面临着使用注销代码在JavaScript控制台中获取以下消息。
[违规]长时间运行的JavaScript任务需要318ms session.php:51 1 sdk.js:135
[违规]处理程序花了83毫秒的运行时间(允许50毫秒)
我试图搜索其他类似的线程,这些解决方案对我来说没有用。我尝试删除部分代码,看看哪个部分有问题。很明显,由于Facebook的JS SDK导致错误,如消息中所示。我还停用了所有Chrome扩展程序。
代码在Firefox 中正常运行,但不在Chrome中,也不在Opera中。我有什么方法可以延长这个超时时间吗?或者在chrome中解决此问题的任何其他方法。这是我的注销代码。
<?php
session_start();
//echo $_SESSION["current_user"];
//echo $_COOKIE["current_user"];
session_destroy();
unset($_COOKIE["current_user"]);
setcookie("current_user","",time() -3600, "/","", 0);
//header("location: login.php");
?>
<!doctype html>
<html>
<head>
</head>
<body>
<script>
// Default settings
window.fbAsyncInit = function() {
FB.init({
appId : '<app-id>',
cookie : true,
xfbml : true,
version : 'v2.8'
});
FB.AppEvents.logPageView();
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
window.onload = function(){
logout();
}
function logout(){
console.log("1");
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
FB.logout();
console.log("2");
window.location="login.php";
console.log("3");
}
else{
console.log("4");
window.location="login.php";
console.log("5");
}
});
}
</script>
</body>
</html>
出于显而易见的原因,我已从代码中删除了App-Id。任何帮助表示赞赏。 :)
答案 0 :(得分:67)
“Chrome违规行为”不代表Chrome或您自己的网络应用中的错误。它们是警告,可以帮助您改进应用。在这种情况下,Long running JavaScript
和took 83ms of runtime
会提醒您,可能有机会加快您的脚本速度。
(“违规”不是最好的术语;这里用来暗示脚本“违反”预定义的指南,但“警告”或类似内容会更清楚。这些消息最初出现在2017年初的Chrome中,应该理想情况下,有一个“更多信息”提示,详细说明含义并向开发人员提供建议的操作。希望将来可以添加这些操作。)
答案 1 :(得分:5)
您似乎找到了自己的解决方案,但在this page点
上对其他人有帮助4.注意Animation Frame Fired事件右上角的红色三角形。每当你看到一个红色三角形时,就会发出警告 是与此事件相关的问题。
如果您将鼠标悬停在这些三角形上,则可以看到这些是违规处理程序错误,并且按照第4点。是的,有一些与该事件相关的问题。
答案 2 :(得分:4)
也许有点偏离主题,只是被告知,当您在异步函数(如setTimeout
)中使用断点调试代码时,也可以看到此类消息:
[Violation] 'setTimeout' handler took 43129ms
该数字(43129毫秒)取决于您停止异步功能的时间
答案 3 :(得分:1)
因为没有人回答如何让它消失......事实证明,如果您的处理程序是一个带有 await 方法的异步函数,它将抑制消息。
function sleep (ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
async timeoutHandler() {
await sleep(1)
... // heavy duty code here
}
setTimeout(timeoutHandler, 10000)
如果您经常这样做……最好用专用的抑制器方法替换 sleep(1)。我只是碰巧在我的实用程序中休眠以调试竞争条件。