2016-05-14 90 views
2

我是新的铬应用程序开发,我已经开发了基于桌面的应用程序几天回来使用NW,现在我想开发同样的应用程序的铬。如何以编程方式访问Chrome应用安装目录?

这里就是我想实现 -

1,创建文件夹(命名为应用程序的名称相同),在用户的本地文件系统,安装应用程序时。

2.存储/访问上述文件夹内的文件和文件夹。

这些问题可以通过chrome的文件系统API解决吗?如果是的话请给我建议。

顺便说一句,我曾经试图访问文件系统的API和我的清单文件看起来像如下─

{ 
    "manifest_version": 2, 
    "name": "sampleApp", 
    "short_name": "sampleApp", 
    "description": "A Sample APP", 
    "version": "0.0.1", 
    "minimum_chrome_version": "38", 

    "icons": { 
    "16": "assets/images/icon_16.png", 
    "128": "assets/images/icon_128.png" 
    }, 
    "permissions": [ 
    {"fileSystem": ["write", "retainEntries", "directory","requestFileSystem"]}, 
    "unlimitedStorage", 
    "system.network", 
    "storage" 
    ], 
    "app": { 
    "background": { 
     "scripts": ["main.js"] 
    } 

    } 
} 

当我运行我的应用程序并尝试访问文件系统的API,我看到了Chrome扩展警告面积 -

注:我使用赢得10

fileSystem.requestFileSystem' is not allowed for specified platform 

回答

3

requestFileSystem是错误的API使用:

仅适用于在信息亭会话中运行的信息亭应用程序。

您应该致电fileSystem.chooseEntry询问用户他想在哪里创建文件夹,然后保留该条目,这样就不需要再次申请许可。

没有办法不通过chooseEntry询问用户,但您只能这样做一次。

好的fileSystem API样品是provided by Google


注意,你可以静静地请求访问您的应用程序的安装文件夹(如你在标题问)与chrome.runtime.getPackageDirectoryEntry。但是,此访问权限是只读的。

如果您修改该文件夹,Chrome会立即禁用您的应用为“受到攻击”,因为它会保留从Chrome网上应用店下载的所有文件的已签名哈希。


作为一个潜在的解决方案,可以request a virtual filesystem提示用户之前,如果你不希望出现这种情况的提示是你的应用程序做的第一件事。但要写入磁盘,您需要提示。因此,以这种方式对它进行过度复制是没有意义的 - 向用户解释您需要他/她选择保存位置。

+0

感谢您的回复,我已经尝试过早期的文件系统示例,它不符合我的要求,我不想随时提示保存为对话框,有没有其他方法可以实现相同的场景,可能会有一些其他位置不需要在应用程序目录中。? – Ahtisham

+0

不,在任何情况下,您都不会被允许在没有提示的情况下直接写入权限。 – Xan

+0

在Kiosk模式下,您可以在没有用户提示的情况下获得具有写权限的外部文件系统:https://developer.chrome。com/apps/fileSystem#method-requestFileSystem – kzahel