2013-01-01 74 views
0

要开始我的页面,我做了一个与Facebook的检查,以获得用户的登录状态。然后,我在窗口对象中创建一个名称空间,以用于其他JavaScript文件。在我加载任何其他JavaScript之前,我需要创建此名称空间,否则当我尝试访问它时将不确定。有时它首先完成,有时它不完成。我怎样才能确保它每次都正确地发生?如何确保这个javascript的顺序?

. 
. 
. 
     FB.getLoginStatus(function(response) { 
      // store data on the user inside of a namespace 
      // inside of the window object so it can be accessed 
      // from anywhere. Use this like '$_SESSION' 
      console.log('doing it'); 
      window.easyUserData = { 
      fbRespose: response, 
      site: <?php echo '"'.$site.'"'; ?> 
      }; 
     }) 
     }; 

     (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> 
    <!-- Load the script "js/main.js" as our entry point for require --> 
    <script data-main="js/main" src="lib/Require/require.js"></script> 

具体而言,我需要的:

<script data-main="js/main" src="lib/Require/require.js"></script> 

不发生,直到Facebook的功能齐全

回答

1

移动代码依靠命名空间 Facebook的回调。如果它是<script data-main="js/main" src="lib/Require/require.js"></script>,动态创建script元素:

// ... 

    FB.getLoginStatus(function(response) { 
    // store data on the user inside of a namespace 
    // inside of the window object so it can be accessed 
    // from anywhere. Use this like '$_SESSION' 
    console.log('doing it'); 
    window.easyUserData = { 
     fbRespose: response, 
     site: <?php echo '"'.$site.'"'; ?> 
    }; 

    // Create the script element when ready 
    var script = document.createElement('script'); 
    script.setAttribute("data-main", "js/main"); 
    script.src = "lib/Require/require.js"; 
    document.getElementsByTagName('script')[0].parentNode.appendChild(script); 
    // Or instead of `document.getElementsByTagName('script')[0].parentNode` 
    // you can use `document.documentElement` or `document.getElementsByTagName('head')[0] 
    // or a few others 
    }) 
}; 
+0

比较遗憾的是,我需要的“<脚本数据主要=” JS /主“SRC =” LIB /Require/require.js“>”在fb回调后发生 –

+0

@TroyCosentino:这是我的第二个猜测,刚刚添加。 :-) –

+0

真棒,谢谢! –

0

可以所有移动到一个地方作为TJ建议。 或者你可以检查,看看是否在创建变量试图运行你自己的代码之前:

// First this: 
FB.getLoginStatus(function(response) { 
    window.easyUserData = { 
     fbRespose: response, 
     site: <?php echo '"'.$site.'"'; ?> 
    }; 
}); 

// Later in the code: 
(function() { 
    var isFBLoaded = function() { 
     // If FB has loaded - run our code 
     if (window.easyUserData) { 
      myOtherFBStuff(); 
     } 
     // If not - check again in 500 ms 
     else { 
      setTimeout(isFBLoaded, 500); 
     } 
    }; 

    var myOtherFBStuff = function() { 
     // do stuff here 
    }; 

    isFBLoaded(); 
})(); 
相关问题