Javascript 去哪里最好<;div id=";fb根“;那么JS呢?

Javascript 去哪里最好<;div id=";fb根“;那么JS呢?,javascript,facebook,asynchronous,facebook-javascript-sdk,Javascript,Facebook,Asynchronous,Facebook Javascript Sdk,因此,div和对fb js:fb的调用表示将其放在(body)标记后面。任何使用它的wp插件都会将其放在页脚中(wp_footer(),因为,好吧,没有wp_,只在_body()之后)。我曾经遇到过这样一种情况,我所需要的fb功能只有在这个东西在body标签后面时才起作用。我对js的了解还不够,不知道两者的区别是什么,也不知道正文还是页脚是最好的地方。如果您需要在文档页脚附近使用js sdk,最好使用async,并且只有在加载并初始化sdk后才进行api调用 我用示例: 假设我已将所有api调用

因此,div和对fb js:fb的调用表示将其放在(body)标记后面。任何使用它的wp插件都会将其放在页脚中(wp_footer(),因为,好吧,没有wp_,只在_body()之后)。我曾经遇到过这样一种情况,我所需要的fb功能只有在这个东西在body标签后面时才起作用。我对js的了解还不够,不知道两者的区别是什么,也不知道正文还是页脚是最好的地方。

如果您需要在文档页脚附近使用js sdk,最好使用async,并且只有在加载并初始化sdk后才进行api调用

我用示例: 假设我已将所有api调用包装在函数中


window.fbAsyninit=函数(){
FB.init({
appId:'135669679827333',
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true,//解析xfbml
频道URL:'https://anotherfeed.com/emo/channel.html“,//channel.html文件
oauth:true//启用oauth 2.0
});
//facebook已经加载并初始化,您可以从这里调用api函数。
if(window!=window.top){
FB.Canvas.EarlyFlush.addResource(“https://anotherfeed.com/");
setTimeout(“FB.Canvas.setAutoGrow(250);”,2000);
切换('connections');//我的api调用
FB.XFBML.parse(loginb);//我的api调用
}否则{
}
//!facebook加载并初始化。
};
//异步加载SDK
(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id))返回;
js=d.createElement;js.id=id;
js.src=“//connect.facebook.net/en_US/all.js”;
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);

就在要加载的每个页面上的开始正文标记之后

更多来自facebook SDK文档:

不能使用display:none或display隐藏fb根元素 可见性:隐藏,或者SDK的某些部分在中无法正常工作 Internet Explorer

SDK将元素插入到fb根目录中,这些元素将被定位 相对于主体或靠近主体顶部的图元 页最好是fb根元素不在元素内部 带位置:绝对或位置:相对。如果你必须把 fb根元素位于定位元素的内部,那么您还应该 给它一个靠近身体顶部或身体某些部位的位置 SDK可能无法正常工作


不完全是我想要的答案@Shawn E Carter,但谢谢你。我今天发现:“SDK将元素插入fb根目录中,这些元素将相对于正文或靠近页面顶部的元素进行定位。如果fb根元素不在位置为“绝对”或“位置:相对”的元素内,则效果最好。如果必须将fb根元素放置在已定位元素的内部,则还应将其放置在靠近主体顶部的位置,否则SDK的某些部分可能无法正常工作。“对不起,Doug,我在Asynch上面的应用程序中运行SDK。它工作的原因是,我从异步中的函数中编写了所有社交插件,然后使用xfml.Parse来呈现。希望这有帮助。建议放置是为了计时。如果sdk没有下载和初始化,你就不想打电话。啊,我想你说的是,因为你在Windows中运行所有东西。fbAsyninit,当你做那块js时,这并不重要。如果在fb js之前发生了一些事情,那么它将不起作用。如果fb的文档是正确的,那么相对于身体,首先确保js负载?html的元素是否按照层次结构的顺序加载,即body、container div、container内的div、div withinthat等?我的意思是,我将所有调用包装在函数中,并从异步中调用它们,因此在sdk初始化之前不会调用它们。时间就是一切。如果您使用的是同步加载,它将无法工作。加载SDK后,将立即运行分配给window.fbasyninit的函数。加载SDK后要运行的任何代码都应放在该函数中,并放在调用FB.init之后。例如,您可以在此处测试用户的登录状态,或订阅应用程序感兴趣的任何Facebook事件。您是对的,这就是为什么我将调用包装在函数中,例如登录按钮中的原因。函数loginbutton(){var loginb=document.getElementById('loginbutton');loginb.innerHTML='';FB.XFBML.parse(loginb);};
 <div id="fb-root"></div>
<script>
      window.fbAsyncInit = function() {
        FB.init({
    appId  : '135669679827333',
    status : true, // check login status
    cookie : true, // enable cookies to allow the server to access the session
    xfbml  : true, // parse XFBML
    channelUrl : 'https://anotherfeed.com/emo/channel.html', // channel.html file
    oauth  : true // enable OAuth 2.0
        });

// facebook has been loaded and init, you can call your api functions from here.
if (window!=window.top) {
FB.Canvas.EarlyFlush.addResource("https://anotherfeed.com/");
setTimeout("FB.Canvas.setAutoGrow(250);", 2000);
toggle('connections');  // my api call
FB.XFBML.parse(loginb); // my api call
}else {
}
// !facebook load and init.
      };
  // Load the SDK Asynchronously
(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/all.js";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

</script>
</body>
</html>