0

私のページを開始するには、Facebookでチェックを行い、ユーザーのログインステータスを取得します。次に、他の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の機能が完了するまで発生しない

4

2 に答える 2

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
  })
};
于 2013-01-01T10:28:23.007 に答える
0

TJが提案するように、すべてを1か所に移動できます。または、独自のコードを実行する前に、変数が作成されているかどうかを確認することもできます。

// 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();
})();
于 2013-01-01T10:40:02.387 に答える