无法在Google Chrome扩展程序中读取null的属性“chromeExOAuthConfig”

时间:2012-02-29 10:45:54

标签: google-chrome-extension twitter twitter-oauth

我正在开发推文的Chrome扩展程序。我正在使用Google oAuth tutorial

我需要帮助才能从Twitter获得授权用户。并在某处保存凭据,以便我可以使用它们从我的应用程序发推文。我是新手,我需要指导。我编写了以下方法。开始授权过程。

但它不会将我发送给Twitter认证。当我调用这个授权方法时。我做得对吗?

我需要一些指针。我也下载了chrome_ex_oauth.html。这将被称为回调。对?

我不知道......当我获得这些访问令牌和秘密时,会将其保存到每个授权用户并使用它们进行推文。

 <script type="text/javascript" src="chrome_ex_oauthsimple.js"></script>
  <script type="text/javascript" src="chrome_ex_oauth.js"></script>  

 jQuery(function() {

            var oauth = ChromeExOAuth.initBackgroundPage({
                  'request_url': 'https://api.twitter.com/oauth/request_token',
                  'authorize_url': 'https://api.twitter.com/oauth/authorize',
                  'access_url': 'https://api.twitter.com/oauth/access_token',
                  'consumer_key': '---',
                  'consumer_secret': '---',
                  'scope': '',
                  'app_name': 'Tweet'
                });
            jQuery('#connect').click(function (){

                oauth.authorize(install);       
            });
        });

        function install() {
          alert('success')
        }

        function callback(resp, xhr) {
          // ... Process text response ...
        };  

修改

我的oauth.authorize被叫了。然后会出现重定向页面。但它坚持重定向......&#39;。错误控制台显示以下错误。

无法读取属性&#39; chromeExOAuthConfig&#39;为null enter image description here

1 个答案:

答案 0 :(得分:1)

我发现Chrome OAuth教程非常臃肿且间接。我刚刚建立了一个使用OAuth2提取私有GitHub数据的扩展。

Here is the source(一定要看看inject.js和adapter.html - 两者都独立于jQuery并且是必需的。)

我基本上只是改造了这个solution,以满足我的需求。

发生的事情是:

  1. 您使用自己的应用程序ID请求授权。
  2. Twitter将让用户登录并授权该应用程序。
  3. Twitter会将您重定向到指定的指定重定向参数(如果您根据网页或服务器不想担心扩展名,我会指定重定向点击https://twitter.com/robots.txt,因为您的扩展程序依赖于推特,如果Twitter失败,无论如何都无关紧要,而且这个robots.txt页面不会去任何地方)
  4. 添加要注入重定向网址的内容脚本。让脚本拉出查询字符串并将其附加到适配器页面URL并重定向到它。
  5. 在适配器页面中,从查询字符串中加载rip访问代码,并使用访问代码和应用程​​序机密向Twitter发送请求。如果一切都正确完成,您将收到来自Twitter的回调,为用户提供访问令牌。
  6. 将令牌保存到扩展本地存储,关闭适配器页面,你很好
  7. 现在,当弹出窗口打开时,您可以从本地存储中获取OAuth2令牌以与Twitter API一起使用。

    Here is more detail about the OAuth2 flow.

    向您提供最新消息

    从我在控制台中看到的内容看起来好像没有找到背景页面。您的扩展程序是否正在运行后台页面?如果是,并且这是新添加的,您应该使用chrome:// extensions处的扩展名旁边的重新加载按钮重新加载扩展程序。当您更改清单中声明的​​内容并且通常需要重新加载时,Chrome非常挑剔。但是chrome.extensions.getBackgroundPage()是一个标准的API调用,所以返回null是一个问题。

    你有没有看过我的解决方案?它运行得非常好,非常快,并且可以自定义适配器页面以显示较慢连接(用户喜欢反馈)的加载进度。它也不依赖于jQuery。您可能不会注意到差异,但将jQuery库加载到重定向页面会使事务花费更长时间,因为必须引入脚本。