gpt4 book ai didi

javascript - Fb.api 在墙上发布未定义的帖子

转载 作者:行者123 更新时间:2023-11-28 07:57:56 26 4
gpt4 key购买 nike

我想将 HTML ID 的值作为消息发布在我的 Facebook 墙上。发布到 Facebook 可以工作,但 FB 最终会写入 undefined 作为 message: 传入的值。我正在使用var word = document.getElementById("fb-root").value;获取值但 fb.api正在将值变为未定义。

请参阅下面的代码:

 <html>
<head>
<title>My Facebook Login Page</title>
<script type="text/javascript">
function postToWall() {
var word = document.getElementById("fb-root").value;
var params = {};
params['message'] = word;
params['name'] = 'test';
params['description'] = 'test';
params['link'] = 'asas.com';
params['picture'] = 'http://3.bp.blogspot.com/--jbgq-gytJQ/URaJHK_93LI/AAAAAAAAAF0/SkyoK7H3r7U/s1600/Simple+Apple.png';
params['caption'] = 'test';

FB.api('/me/feed', 'post', params, function(response) {
if (!response || response.error) {
alert('Error occured');
} else {
alert(word);
}
});
}
</script>

<div id="fb-root">test</div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'test',
status : true,
cookie : true,
xfbml : true,
oauth : true
});
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
</script>
</head>
<body>
<div id="fb-root">tests</div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
appId:<fbapp-id>, cookie:true,
status:true, xfbml:true
});
</script>
<fb:login-button perms="publish_stream">Login with Facebook</fb:login-button>
<a href="javascript:postToWall()">Post To Wall</a>
</body>
</html>

最佳答案

检查代码后(很乱)你需要注意这几点,

一切都是重复的

  • 在 HTML 中,不能有多个带有 id 的元素。 ,这里有 2 个带有 id 的元素fb-root

    <div id="fb-root">test</div>
  • 您加载了 JS-SDK 2 次,其中一次是异步加载的;

    // Load the SDK Asynchronously
    (function(d){
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
    if (d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    ref.parentNode.insertBefore(js, ref);
    }(document));

    和其他同步(使用 <script> )

    <script src="http://connect.facebook.net/en_US/all.js"></script>
  • 您调用FB.init()两次

  • 您输入 fb-root 之一head 中的元素标签,这是 HTML 中的罪过;)

  • <div id="fb-root"></div>当您实例 Facebook 应用程序时,它会从 DOM 中删除,它就像一个虚拟元素,但对 Facebook 很重要,而不是您或我,您应该始终保留它而不使用它,而是使用不同的 id 创建一个新元素。喜欢 myWord <div id="myWord">my word</div>虽然div不是内联元素,这是一种不好的做法。

这是您清理过的代码;

<html>
<head>
<title>My Facebook Login Page</title>
<script type="text/javascript">
function postToWall() {

var word = document.getElementById("myWord").value;
var params = {};
params['message'] = word;
params['name'] = 'test';
params['description'] = 'test';
params['link'] = 'asas.com';
params['picture'] = 'http://3.bp.blogspot.com/--jbgq-gytJQ/URaJHK_93LI/AAAAAAAAAF0/SkyoK7H3r7U/s1600/Simple+Apple.png';
params['caption'] = 'test';

FB.api('/me/feed', 'post', params, function(response) {
if (!response || response.error) {
alert('Error occured');
} else {
alert(word);
}
});

}
window.fbAsyncInit = function() {
FB.init({
appId : '{App_id}',
status : true,
cookie : true,
xfbml : true,
oauth : true
});
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
</script>
</head>
<body>
<div id="fb-root"></div>
<fb:login-button perms="publish_stream">Login with Facebook</fb:login-button>
<a href="javascript:postToWall()">Post To Wall</a>
</body>
</html>

关于javascript - Fb.api 在墙上发布未定义的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25837676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com