1

我在頁面加載時按谷歌的文檔,運行這段代碼:GAPI在內容腳本未定義

(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庫加載到內容腳本中?

回答

0

您正在異步加載Google JS客戶端。
然後嘗試在加載完成之前立即使用它。這是行不通的。

相反,您可以同步加載它(使用正常的<script src="">標記),或者只在異步腳本加載後運行代碼(例如,使用jQuery.getScript())。

+0

在我運行依賴'gapi'的代碼之前,客戶端對象('gapi')存在。由於某些原因,在內容腳本中訪問它時,該對象不存在。有任何想法嗎? – dopatraman 2014-09-22 00:29:43

2

由於isolated context,它不起作用。內容腳本無法訪問頁面上下文中的代碼,並且添加腳本標籤會在頁面上下文中注入代碼。
當您在頁面的JavaScript控制檯中執行代碼時,您正在頁面的上下文中執行它。

您應該爲此使用identity API