如何将 HTML 加载到 Chrome 打包应用程序中的 iframe

How to load HTML into iframe in a Chrome packaged app

我正在尝试制作一个 chrome 打包应用程序以允许文件将自身保存回磁盘。我打算使用 chrome.fileSystem.chooseEntry() 打开文件。然后我必须将它加载到带有沙箱属性集的 iframe 中。它将使用文档事件侦听器 (document.createEvent) 等待客户端文件发送其更新的文件内容,然后将其保存回文件系统。

所以我需要做两件事,第一件事我在 Chrome 打包的应用程序中找到的信息很少,你不能在其中使用 document.write .我不能使用 body.innerHTML,因为它是一个带有 head 元素的完整 HTML 文档。

  1. 我想将文件加载到 iframe 中运行。该文件可能有几 MB。数据 url 可以处理这么大的东西吗?我是否放入 src 中?或者我把它放在其他地方并将 src 设置为 javascript:void(0);?
  2. 我想将一个元素注入 iframe DOM 并侦听该元素上的事件。这实际上看起来我可以从我们已有的 Firefox 实现中复制它。

这是我必须打开它的代码,是从 chrome.fileSystem 页面复制的。

chrome.fileSystem.chooseEntry(
    {
        type: 'openFile', 
        accepts:[{
            extensions: ['html']
        }] 
    }, 
    function(fileEntry) {
        if (!fileEntry) {
            return;
        }
        console.log(fileEntry);
        fileEntry.file(function(file) {
            console.log(file);
            var reader = new FileReader();
            reader.onload = function(e) {
                console.log(e); 
                //set iframe contentDocument
            };
            reader.readAsText(file);
        });
    }
);

这是 iframe。

<iframe id="test" sandbox="allow-scripts allow-popups allow-forms allow-same-origin" seamless="seamless"></iframe>

我最终使用了 webview。我真的很喜欢它,因为它就像一个完全正常的浏览器 window,除了上下文菜单。但是所有幕后的东西看起来都很正常,除了警告、提示和确认,你必须在父 window 中自己实现,而且你必须使用事件来允许它访问几乎任何东西外部,除了可能 ajax 个请求。