【问题标题】:gapi is undefined in content script内容脚本中未定义 gapi
【发布时间】:2014-09-21 23:33:11
【问题描述】:

我根据谷歌文档在页面加载时运行此代码:

(function() {

    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/client:plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);

})();

这是我的代码:

gapi.auth.authorize({
    'client_id': 'my_client_id', 
    'immediate': 'false', 
    'response_type':'token', 
    'scope': 'https://www.googleapis.com/auth/userinfo.email'
}, function() {
    console.log(arguments);
});

如果我在控制台中访问gapi,我会看到该对象。但是,如果我在该代码块处使用断点,gapi 是未定义的。现在,我在这里粘贴的代码是通过内容脚本加载的。如何将gapi 库加载到内容脚本中?

【问题讨论】:

    标签: javascript google-chrome google-chrome-extension google-api google-api-client


    【解决方案1】:

    由于isolated context,它不起作用。内容脚本无法访问页面上下文中的代码,添加脚本标记会在页面上下文中注入代码。
    当您在页面的 JavaScript 控制台中执行代码时,您是在页面的上下文中执行代码。

    您可能应该为此使用identity API

    【讨论】:

      【解决方案2】:

      您正在异步加载 Google JS 客户端。
      然后,您尝试在它完成加载之前立即使用它。那是行不通的。

      相反,您可以同步加载它(使用普通的<script src=""> 标签),或者只在异步脚本加载后运行您的代码(例如,使用jQuery.getScript())。

      【讨论】:

      • 在我运行依赖于gapi 的代码之前,客户端对象(gapi)已经存在。由于某种原因,在内容脚本中访问它时,该对象不存在。有什么想法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 2019-08-14
      • 2021-07-25
      • 1970-01-01
      • 2014-05-27
      • 2019-02-20
      • 1970-01-01
      相关资源
      最近更新 更多