Javascript 无法读取属性';授权';谷歌Oauth中未定义的?

Javascript 无法读取属性';授权';谷歌Oauth中未定义的?,javascript,jquery,google-chrome-extension,oauth,Javascript,Jquery,Google Chrome Extension,Oauth,我正在使用Oauth开发chrome扩展,用户可以通过Google帐户登录 我还在html文件中包含js库: <script src="js/jquery-2.1.1.min.js" type="text/javascript"></script> <script src="js/client.js"></script> 我的问题是:我无法通过google帐户登录,它显示错误:未捕获类型错误:无法读取未定义的属性“authorize” 注意

我正在使用
Oauth
开发chrome扩展,用户可以通过Google帐户登录

我还在html文件中包含js库:

<script src="js/jquery-2.1.1.min.js" type="text/javascript"></script>

<script src="js/client.js"></script>  
我的问题是:我无法通过google帐户登录,它显示错误:
未捕获类型错误:无法读取未定义的属性“authorize”


注意:如果我以html格式运行,我可以正常登录,但作为chrome扩展使用时无法登录

似乎gapi.auth尚未初始化,原因是您在进行此调用之前没有按照正确的步骤进行设置。 因此,我只是在这里放了一个示例,让您看看在成功初始化gapi对象时是否遗漏了任何步骤。来了

<script type="text/javascript">
    (function( gapi ) {
        gapi.client.setApiKey(apiKey); // your variable for apiKey
        window.setTimeout(checkAuth,1);

        function checkAuth() {
            gapi.auth.authorize({client_id: clientID, scope: scopes, immediate: true},   handleAuthResult);
        }

        function handleAuthResult(authResult) {
            var authorizeButton = document.getElementById('id-of-your-login-button');
            if (authResult && !authResult.error) {
                authorizeButton.style.visibility = 'hidden';
                makeApiCall();
            } else {
                authorizeButton.style.visibility = '';
                authorizeButton.onclick = handleAuthClick;
            }
        }

      function handleAuthClick(event) {
          gapi.auth.authorize({
              client_id: clientID,
              scope: scopes,
              response_type: 'code token id_token gsession',
              access_type: accessType,
              immediate: false
          }, handleAuthResult);
          return false;
       }
     })( gapi );
</script>

(功能(gapi){
gapi.client.setApiKey(apiKey);//apiKey的变量
setTimeout(checkAuth,1);
函数checkAuth(){
auth.authorize({client_id:clientID,scope:scopes,immediate:true},handleAuthResult);
}
函数handleAuthResult(authResult){
var authorizeButton=document.getElementById('id-of-your-login-button');
if(authResult&!authResult.error){
authorizeButton.style.visibility='hidden';
makeApiCall();
}否则{
authorizeButton.style.visibility='';
authorizeButton.onclick=handleAuthClick;
}
}
函数handleAuthClick(事件){
gapi.auth.authorize({
客户id:clientID,
范围:范围,
响应类型:'code token id_token gsession',
访问类型:访问类型,
即时:假
},handleAuthResult);
返回false;
}
})(gapi);

您可以将此脚本标记安全地放在按钮html代码下方的body标记中。

检查gapi和gapi.auth的值加载JS文件时是否存在任何网络错误?您在哪里包含这些脚本并运行该代码?请为我们将代码放在小提琴中好吗?也许您的函数在脚本调用之上。由于函数声明在执行时始终可用,如果gapi变量未初始化,它将成为一个全局隐式变量,其值为undefined。尝试将gapi值登录到控制台,如果它是一个对象,那么您可能对用于放置函数和脚本调用的顺序有问题。
<script type="text/javascript">
    (function( gapi ) {
        gapi.client.setApiKey(apiKey); // your variable for apiKey
        window.setTimeout(checkAuth,1);

        function checkAuth() {
            gapi.auth.authorize({client_id: clientID, scope: scopes, immediate: true},   handleAuthResult);
        }

        function handleAuthResult(authResult) {
            var authorizeButton = document.getElementById('id-of-your-login-button');
            if (authResult && !authResult.error) {
                authorizeButton.style.visibility = 'hidden';
                makeApiCall();
            } else {
                authorizeButton.style.visibility = '';
                authorizeButton.onclick = handleAuthClick;
            }
        }

      function handleAuthClick(event) {
          gapi.auth.authorize({
              client_id: clientID,
              scope: scopes,
              response_type: 'code token id_token gsession',
              access_type: accessType,
              immediate: false
          }, handleAuthResult);
          return false;
       }
     })( gapi );
</script>