您希望该fileEntry.toURL()
方法返回filesystem:..
可用于将图像直接嵌入页面的 -URL。但是,情况并非如此,因为http://crbug.com/148788。
如果您确定在请求权限后始终可以访问文件系统,从用户文件系统嵌入图像的最有效解决方案是使用blob:
-URLs。这是一个没有任何错误处理的示例:
// Within your app's code, somehow get a DirectoryEntry (or FileEntry):
chrome.fileSystem.chooseEntry({
type: 'openDirectory'
}, function(directoryEntry) {
// Assume that the user has selected the directory containing the images.
directoryEntry.getFile('path/to/img.png', function(fileEntry) {
fileEntry.file(function(file) {
var url = URL.createObjectURL(file);
// url looks like "blob:chrome-extension%3A//[extensionid]/[uuid]"
var img = new Image();
img.src = url;
document.body.appendChild(img);
});
});
});
如果您事先不知道图像路径,那么您可以使用DirectoryReader
(created using directoryEntry.createReader()
) 枚举目录中的项目,或者直接提示输入FileEntry
(并使用fileEntry.file
等,以获取 blob:-URL)。
要尝试前面的代码片段,请使用以下代码manifest.json
{
"name": "FS App",
"version": "2",
"manifest_version": 2,
"app": {
"background": {
"scripts": ["background.js"]
}
},
"permissions": [
{"fileSystem": ["directory"]}
]
}
background.js
chrome.app.runtime.onLaunched.addListener(function() {
chrome.app.window.create('main.html');
});
main.html
<script src="main.js"></script> <!-- main.js = previous code -->
创建一个包含“path/to/img.png”的目录,加载应用程序,启动应用程序并单击刚刚创建的包含该图片的目录。您将看到图像嵌入在应用程序的文档中。