[英]Javascript: My fbAsyncInit() method never gets called
我正在Facebook的开发者网站上直接从这个页面复制代码,并且fbAsyncInit()方法永远不会触发。 我也读过这个页面 ,我已经通过几种不同的方式调整了代码,我无法解决这个问题。 你的意见?
此外,为了它的价值,当我尝试运行此代码和Chrome(在Mac上)并运行Firebug lite时,我收到一条错误消息“无法在此页面中加载Firebug Lite”
这是代码......
<html>
<head>
</head>
<body>
<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId : '1234567890', // App ID
channelUrl : '//localhost/test.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
alert("this statement never gets called either");
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
</script>
</body>
</html>
我有同样的问题。 在异步加载之前,似乎我在其他地方加载了JavaScript库//connect.facebook.net/en_US/all.js
。
这可能会让事情有点困惑。
我删除了过早的加载标签定义,现在我很好。
你应该改变:
js.src = "//connect.facebook.net/en_US/all.js";
至:
js.src = "http://connect.facebook.net/en_US/all.js";
你有同步加载的问题吗?
<script src="//connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
appId : 'YOUR_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
});
</script>
这个答案可能为时已晚,而且对于很多情况都不会有帮助但是,我发现我的Firefox浏览器经过一些体面的工作后显然有点疯狂并导致错误...只是重启该死的东西
请更改您的应用程序ID然后开始工作
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'your-app-id',
autoLogAppEvents : true,
xfbml : true,
version : 'v2.11'
});
};
(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 = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
由于您的文件都被称为test.html,而channelUrl应该是test.html,因此您正在创建循环引用 。 对于正确的channelUrl,它应该只包含一行
<script src="//connect.facebook.net/en_US/all.js"></script>
http://developers.facebook.com/docs/reference/javascript/
通道文件解决了某些浏览器中跨域通信的一些问题。 channel.html文件的内容只能是一行:
<script src="//connect.facebook.net/en_US/all.js"></script>
尽可能长时间地缓存通道文件非常重要。 提供此文件时,您必须发送有效期限过长的有效Expires标头。 这将确保浏览器缓存频道文件,这对于流畅的用户体验非常重要。 如果没有适当的缓存,跨域通信将变得非常缓慢,用户将遭受严重降级的体验。 在PHP中执行此操作的简单方法是:
<?php $cache_expire = 60*60*24*365; header("Pragma: public"); header("Cache-Control: max-age=".$cache_expire); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT'); ?> <script src="//connect.facebook.net/en_US/all.js"></script>
channelUrl参数是可选的,但建议使用。 提供频道文件有助于解决三个特定的已知问题。 首先,包含跨帧通信的代码的页面可能会导致社交插件在没有channelUrl的情况下显示为空白。 其次,如果没有提供channelUrl并且页面包括自动播放音频或视频,则用户可以听到两个音频流,因为该页面已经在后台第二次加载以进行跨域通信。 第三,通道文件将阻止在服务器端日志中包含额外的命中。 如果未指定channelUrl,则可以从日志中删除包含fb_xd_bust或fb_xd_fragment参数的页面视图,以确保正确计数。
channelUrl必须是与您包含SDK的页面匹配的完全限定URL。 换句话说,如果您的网站使用www提供服务,则渠道文件域必须包含www,如果您在网页上修改document.domain,则必须在channel.html文件中进行相同的document.domain更改。 协议也必须匹配。 如果您的网页是通过https投放的,那么您的channelUrl也必须是https。 记得也要为脚本src使用匹配协议。 上面的示例代码使用协议相对URL,它可以正确处理大多数https案例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.