全局变量在标记内定义。但是在<script>标记之外访问它时会被覆盖

问题描述 投票:0回答:1

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

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

我的EJS代码:

<body>
<!--------------------- Facebook SDK script Starts --------------------->
<%      var accessToken;   %>
<script>
  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);
   }(document, 'script', 'facebook-jssdk'));

   function statusChangeCallback(response){

    if (response.status === 'connected'){
        accessToken= response.authResponse.accessToken;
    console.log("User Logged in. Access Token: " + accessToken);  

    }
    else
    {
        console.log("Not logged into FB");  
    };

    }


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

</script>
<!--=============== Facebook SDK script ends =============== -->

<fb:login-button 
  scope="public_profile,email,user_friends"
  onlogin="checkLoginState();">
</fb:login-button>
<h1>Click here to log into FB: </h1>
<form action="/checkdp" method="GET">
    <input type="hidden" name="accessToken" value="<%=accessToken%>"> 
    <button>Click Here</button>
</form>

</body>

您可能已经注意到,我在var accessToken标记之外引入了带有空值的<script>,并在<script>标记内定义了它的值。

再次添加代码:

    if (response.status === 'connected'){
        accessToken= response.authResponse.accessToken;
    console.log("User Logged in. Access Token: " + accessToken);  

我控制台记录了值,它打印得很完美。但是当我在HTML表单中再次访问变量时,变量值为= ""(null)。

看起来<script>标签内部分配的值一旦超出<script>标签就会被覆盖。

我问的开发人员说它是异步的或类似的东西。我不明白,所以我无法得到他的进一步帮助。

问:有人想试一试吗?

javascript node.js facebook-javascript-sdk ejs
1个回答
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);

(未经测试)。

© www.soinside.com 2019 - 2024. All rights reserved.