我正在尝试在HTML中访问Facebook SDK。


我有一个全局变量 accessToken
。此变量的值将在SDK内生成。 SDK包含在< script>
标记内的ejs文件中。
我的EJS代码:


 < body>
<!--------------------- Facebook SDK script Start --------------------->
<%var accessToken; %GT;
<脚本>
 window.fbAsyncInit = function(){
 FB.init({
 appId:'****',
 cookie:true,
 xfbml:true,
 version:'v2.11'
} );


 FB.getLoginStatus(function(response){
 statusChangeCallback(response);
});

 };

 (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);
}(文档,'script','facebook-jssdk'));

 function statusChangeCallback(response){

 if(response.status ==='connected'){
 accessToken = response.authResponse.accessToken;
 console.log(“用户已登录。访问令牌:”+ accessToken); 

 }
否则
 {
 console.log(“未登录FB”); 
 };

 


 function checkLoginState(){
 FB.getLoginStatus(function(response){
 statusChangeCallback(response);
});
}

< / script>
<! - =============== Facebook SDK脚本结束=============== - >

< fb:login-button
范围= “public_profile,电子邮件,user_friends” 
 onlogin =“checkLoginState();”>
< / fb:login-button>
< h1>点击此处登录FB:< / h1>
<表单action =“/ checkdp”method =“GET”>
 < input type =“hidden”name =“accessToken”value =“<%= accessToken%>”> 
 < button>点击此处< / button>
< / form>

< / body>


&# xA; 您可能已经注意到,我在< script>
标记之外引入了带有空值的 var accessToken
,并在<
中定义了它的值。脚本>
标签。
再次添加代码:


 if(response.status ==='connected'){
 accessToken = response.authResponse.accessToken;
 console.log(“用户已登录。访问令牌:”+ accessToken); 



 我控制台记录了该值并完美打印。但是当我在HTML表单中再次访问变量时,变量值 =“”
(null)。
似乎< script>
标记内分配的值一旦超出< script&gt就会被覆盖;
标签。
我问的开发人员说它是异步的或类似的东西。我不明白,所以我无法得到他的进一步帮助。


问题:有人想尝试一下吗?

答案 0 :(得分:0)
隐藏输入字段的值似乎在解析HTML时在页面加载期间分配。此时accessToken
的值仍为undefined
。
尝试在检索到访问令牌后设置input元素的值:
if (response.status === 'connected'){
accessToken= response.authResponse.accessToken;
document.querySelect( "[name=accessToken]").value = accessToken;
console.log("User Logged in. Access Token: " + accessToken);
(未测试)。