迁移& lt; script>…& lt; / script>To .js文件失败

Migrating <script>...</script> to .js file fails

本文关键字:lt script js 文件 失败 To gt 迁移      更新时间:2023-09-26

我已经得到了oAuth代码在HTML5的标签内工作。当将其移动到.js文件并调用该文件时,我得到错误。我试过复制工作js文件(app.js)的格式,但我似乎不能让它工作。下面是代码:

oAuth.js

var Facebook = function() {
    function mygetLoginStatus() {
        FB.getLoginStatus(function(response) {
            if (response.status === 'connected') {
                mygetProfileData();
            } else {
                FB.login();
            }
        });
    };
    function mygetProfileData() {
        FB.api('/me', {
            fields: 'first_name, last_name, email, picture, work'
        }, function(response) {
            document.getElementById('firstname').value = response.first_name;
        });
    };
    return {
        init: function() {
            window.fbAsyncInit = function() {
                FB.init({
                    appId: '[redacted]',
                    xfbml: true,
                    status: true,
                    version: 'v2.4'
                });
            };
            (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 = "//connect.facebook.net/en_US/sdk.js";
                fjs.parentNode.insertBefore(js, fjs);
            }(document, 'script', 'facebook-jssdk'));
            mygetLoginStatus();
            mygetProfileData();
        },
    };
}();

registration.html

<script type="text/javascript" src="assets/js/oAuth.js"></script>
<script type="text/javascript" src="assets/js/app.js"></script>
...
<script type="text/javascript">
    jQuery(document).ready(function() {
        App.init();
        Facebook.init();
    });
</script>
控制台:

Uncaught ReferenceError: FB is not defined
mygetLoginStatus @ oAuth.js:12
Facebook.init @ oAuth.js:60
(anonymous function) @ registration.event:441
m.Callbacks.j @ jquery.min.js:2
m.Callbacks.k.fireWith @ jquery.min.js:2
m.extend.ready @ jquery.min.js:2
J @ jquery.min.js:2

我做错了什么?这些都是相同类型的错误,我得到当最初在HTML内编写代码,所以我知道它似乎是某种作用域错误。

我明白了。FB必须在返回节中定义,以便其他函数可以使用。这是一个范围问题。该程序的主要逻辑还不完善,但为其他人编写了文档。

var Facebook = function () {

 return {
    init: function() {
        window.fbAsyncInit = function() {
          FB.init({
            appId      : '[redacted]',
            xfbml      : true,
            status     : true,
            version    : 'v2.4'
          });
        };
       (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 = "//connect.facebook.net/en_US/sdk.js";
         fjs.parentNode.insertBefore(js, fjs);
       }(document, 'script', 'facebook-jssdk'));
    },
    getLoginStatus: function() {
            FB.getLoginStatus(function(response) {
                    if (response.status === 'connected') {
                    //console.log('Logged in.');
                            getProfileData();
                    }
                    else {
                            FB.login();
                    }
            });
    },
    getProfileData: function() {
    //console.log('Welcome!  Fetching your information.... ');
            FB.api('/me',{fields: 'first_name, last_name, email, picture, work'}, function(response) {
                    document.getElementById('firstname').value = response.first_name; 
            });
    }
  };
}();