gapi在内容脚本中未定义

时间:2014-09-21 23:33:11

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

我按照google文档加载页面时运行此代码:

(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库加载到内容脚本中?

2 个答案:

答案 0 :(得分:3)

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

您可能应该使用identity API来实现此目的。

答案 1 :(得分:0)

您正在异步加载Google JS客户端 然后,在加载完成之前,请立即尝试使用它。那不会起作用。

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