Javascript:My fbAsyncInit()方法从未被调用
我正在从Facebook的开发者网站上复制代码,FBAsyncint()方法永远不会启动。我也读过,我用了很多不同的方法对代码进行了调整,但我无法启动该方法。你的想法 另外,值得一提的是,当我尝试运行这段代码和Chrome(在Mac上)并运行Firebug lite时,我得到一个错误,上面写着“Firebug lite无法加载到此页面” 这是密码Javascript:My fbAsyncInit()方法从未被调用,javascript,facebook,fbconnect,fbjs,Javascript,Facebook,Fbconnect,Fbjs,我正在从Facebook的开发者网站上复制代码,FBAsyncint()方法永远不会启动。我也读过,我用了很多不同的方法对代码进行了调整,但我无法启动该方法。你的想法 另外,值得一提的是,当我尝试运行这段代码和Chrome(在Mac上)并运行Firebug lite时,我得到一个错误,上面写着“Firebug lite无法加载到此页面” 这是密码 <html> <head> </head> <body> <div id="fb-root"&g
<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>
window.fbAsyninit=函数(){
FB.init({
appId:'1234567890',//应用程序ID
channelUrl:'//localhost/test.html',//通道文件
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
警报(“此语句也不会被调用”);
};
//异步加载SDK
(职能(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);
}(文件);
同步加载有问题吗
<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>
FB.init({
appId:'你的应用程序ID',
channelUrl:'//WWW.YOUR_DOMAIN.COM/channel.html',//频道文件
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
由于您的文件都称为test.html,而channelUrl应该是test.html,因此您正在创建一个循环引用。对于正确的channelUrl,它应该只包含一行
通道文件解决了跨域通信的一些问题
在某些浏览器中。channel.html文件的内容可以是
一行:
重要的是,通道文件的缓存时间应尽可能长
可能的提供此文件时,必须发送有效的Expires标头
有效期长。这将确保通道文件是正确的
由浏览器缓存,这对于流畅的用户体验非常重要。
如果没有适当的缓存,跨域通信将变得非常困难
速度慢,用户体验将严重退化。简单的
在PHP中实现这一点的方法是:
channelUrl参数是可选的,但建议使用。提供
通道文件可以帮助解决三个特定的已知问题。第一,
包含跨帧通信的代码的页面可能会导致社交冲突
插件显示为空白,没有channelUrl。第二,如果没有
提供channelUrl,页面包括自动播放音频或视频
在视频中,用户可能会听到两个音频流,因为页面具有
已在后台为跨域第二次加载
沟通。第三,通道文件将防止包含额外的
点击服务器端日志。如果未指定channelUrl,则
可以删除包含fb_xd_半身像或fb_xd_片段的页面视图
从日志中提取参数以确保正确计数
channelUrl必须是与上的页面匹配的完全限定URL
其中包括SDK。换句话说,通道文件域
如果您的网站是使用www提供服务的,并且如果您修改
您必须在页面上创建相同的document.domain
更改channel.html文件中的内容。协议还必须
匹配。如果您的页面是通过https提供的,那么您的channelUrl也必须是
https。记住将脚本src的匹配协议用作
好。上面的示例代码使用与协议相关的URL,这些URL应该
正确处理大多数https案例
这个答案可能太晚了,而且在很多情况下都没有帮助,但是,我发现我的Firefox浏览器在做了一些体面的工作之后,显然有点疯狂,并导致了那个确切的错误。。。只需重新启动该死的东西您应该更改:
js.src = "//connect.facebook.net/en_US/all.js";
致:
我也有同样的问题。在异步加载之前,我似乎在其他地方加载了JavaScript库
//connect.facebook.net/en_US/all.js
这可能让事情有点混乱
我删除了“过早加载”标记定义,现在我很好。请更改您的应用程序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>
window.fbAsyninit=函数(){
FB.init({
appId:'您的应用程序id',
自动假肢:对,
xfbml:是的,
版本:“v2.11”
});
};
(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id)){return;}
js=d.createElement;js.id=id;
js.src=”https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);
您的文件名为test.html吗?是的,有问题吗?是否存在任何js错误?您正在哪个浏览器中测试它?尝试更改一些不存在的src,然后检查浏览器中的错误日志。谢谢,DMCS,我删除了可选的channelUrl参数,这个方法仍然不会触发。你的想法?尝试删除两个结尾标记中的一个作为额外标记,可能会导致浏览器不喜欢它。是的,我修复了它,它没有帮助。你确定,你唯一的html是你发布的内容吗??浏览器上是否关闭了javascript?是的,当我将代码调整为与同步代码类似时,警报方法仍然不会触发。有什么好处?只有当我删除FB.init()方法时,警报方法fireI不知道。。。这家伙是异步加载的,它似乎对他很有用:顶部的代码是有效的,如果你读了答案,他只需要输入正确的代码appid@BeachRunnerJoe看起来他是在将下面的脚本附加到fb根div,而不是头上。@MikeyG此脚本是
js.src = "http://connect.facebook.net/en_US/all.js";
<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>