Chrome应用可以直接访问Google API(例如Drive)(即没有webview)吗?

时间:2014-07-03 05:24:33

标签: javascript google-chrome google-chrome-app

我正在撰写Chrome App,我想使用Google Drive API让我的用户将文件读/写到他们自己的Google云端硬盘中。

我发现信息表明,从Chrome应用程序流经OAuth流程的唯一方法是使用webview(请参阅此前的StackOverflow问题Google Drive Realtime API in a Chrome Packaged App)。

此限制对我有意义,因为要完成OAuth流程,您必须加载外部内容,并且从安全角度来看,将其与特权Chrome应用程序代码隔离开来听起来很重要。

但是,一旦您拥有OAuth访问令牌,Chrome应用中的JavaScript似乎应该能够直接向Google Drive API发出请求。这不是将任何内容(即HTML或JS)加载到浏览器中,它只是调用远程API来读/写数据。

但似乎唯一受支持的使用Google JavaScript API的方法是使用以下代码远程加载它:

<script src="https://apis.google.com/js/client.js"></script>

由于Chrome应用不允许加载远程内容,因此无法正常工作。

我只想下载client.js并将其放入我当地的Chrome App目录中的想法不起作用,因为client.js似乎认为它可以继续下载/执行更多JavaScript必要的。

基本上,据我所知,Google JavaScript API似乎对提前下载并仅从本地文件运行产生怀疑态度。这听起来准确吗?如果是这样,应用程序从API获取远程数据的唯一方法是在webview和主应用程序之间传递消息,这听起来很痛苦。

对此有何解决方案?或者我是否必须通过webview将所有数据传入/传出API? :(

1 个答案:

答案 0 :(得分:0)

使用身份API,特别是chrome.identity.getAuthToken来获取授权。它封装了OAuth工作。然后,一旦获得授权,使用Ajax执行特定的API(例如,使用METHOD作为方法的https://www.googleapis.com/METHOD之类的URL。)

换句话说,您可以直接访问Google API,而无需处理OAuth的复杂性,当然也无需使用网页视图。

在你的manifest.json中,你需要这样的东西:

"permissions": [
    "identity"
],
"oauth2": {
    "client_id": "....apps.googleusercontent.com",
    "scopes": [
        "https://www.googleapis.com/auth/drive"
    ]
}