如何在Chrome应用程序的Webview中显示文件系统URL?

4
我有一个Chrome打包应用程序,需要我能够查看保存的、离线的网页。这些页面在用户在线时从我的服务器下载,并保存到HTML5文件系统中,以便离线查看。这个Chrome bug ticket似乎表明我想做的是可能的: https://code.google.com/p/chromium/issues/detail?id=343382 根据Chrome应用程序“webview”文档(https://developer.chrome.com/apps/tags/webview),这就是我想出来的。
在我的清单中:
"permissions": [
    {
        "fileSystem": ["write"]
    },
    "storage",
    "unlimitedStorage",
    "webview"
],
"webview": {
    "partitions": [
        {
            "name":"contentView",
            "accessible_resources":["*.html"]
        }
    ]
}

我的webview标签:
<webview id="websiteWebview" minwidth="800" minheight="600" autosize="on" partition="contentView"></webview>

然后我通过javascript添加了'src'属性:

var websiteWebview = document.querySelector('#websiteWebview');
websiteWebview.setAttribute('src', decodeURIComponent(srcUrl));

这将在控制台中显示以下内容:
filesystem:chrome-extension://[appId]/[pathToFile]/index.html
Failed to load resource: net::ERR_FILE_NOT_FOUND
Not allowed to load local resource: filesystem:chrome-extension://[appId]/[pathToFile]/index.html

我不确定接下来该怎么做。先在此感谢您的帮助!


您确定文件存在于您预期的位置吗? - Sarah Elan
1
是的。ERR_FILE_NOT_FOUND错误是webview阻止我的本地文件的症状。https://code.google.com/p/chromium/issues/detail?id=321638 - JSkin
2个回答

1

看起来webview标签不支持文件系统URI - Chromium问题321628。糟糕。

您可以尝试使用FileReader将文件读取为数据URL,然后将webviewsrc属性设置为该URL。

我通过在NaCl中创建的简单Web服务器来解决这个问题,我已经将其嵌入到我的应用程序中了(数据URL正在破坏我的文件编码)。


嗨,你说你通过使用我已经嵌入在我的应用程序中的NaCl中创建的一个简单的Web服务器来解决了这个问题。你能否详细说明一下或者提供一个关于这个主题的教程之类的东西?谢谢! - plocks
1
如果您能让它正常工作,我建议使用数据URL方法,这样可以减少很多工作量,并且您不必了解C/C++ - 我只是因为一些疯狂的文件编码而遇到了麻烦。我使用了TCPSocket类。如果您是NaCl的新手,请参阅NaCl基础知识 - Benjineer
嘿,感谢你的回答。那么没有其他方法可以打开(以Webview方式显示)我在WebApp中下载的本地文件了,是吗? - plocks
1
目前Chrome不支持此功能。 - Benjineer

0
你可以通过在应用程序中包含web server for chorme库来解决这个问题。该网站上有关于如何将其包含在你自己的Chrome应用程序中的示例。这将需要你在清单中使用额外的权限,即一些chrome.sockets权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接