Javascript:我的fbAsyncInit()方法从未被调用
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浏览器在做了一些不错的工作后,显然变得有点疯狂,并导致了确切的错误。。。只需重新启动
由于您的文件名为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必须是与上的页面匹配的完全限定URL其中包含SDK。换句话说,通道文件域如果您的网站是使用www服务的,并且如果您修改document.domain您必须制作相同的document.domainchannel.html文件中的更改。协议还必须火柴如果您的页面是通过https提供的,您的channelUrl也必须是https。记住使用脚本src的匹配协议好上面的示例代码使用与协议相关的URL正确处理大多数https情况。
请更改您的应用程序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>
- 未捕获错误:无法在初始化之前调用方法;
- 通过ajax从客户端调用C#方法来执行C#方法
- 如何避免在angular上多次调用方法;s ng重复
- React路由器错误-'无法调用方法'getRouteAtDepth'的未定义'
- 从window.onbeforeunload调用方法背后的代码
- 当输入字段为空时,如何在angular中调用方法
- 函数调用方法有什么用
- 多次调用方法后返回相同promise的模式
- 当从Chrome扩展动态注入JS时,从onload()内部调用方法
- 茉莉花 - 未调用方法
- jQuery如何在原型中调用方法
- ng显示“;调用方法“;不起作用
- Odoo销售点如何访问模型并使用JS调用方法
- 从React调用方法.JS州
- TinyMCE验证给出错误:无法调用方法'getContent'的未定义
- 向模板实例变量传递调用方法调用的结果时出现异常
- 如何在对象中调用方法
- 检查对话框是否为 Open 会引发“初始化前无法在对话框上调用方法”错误
- 在输入类型提交按钮上调用 C# 方法
- 通过类选择器单独调用方法