可以同步文件系统API的Chrome扩展使用(Can the synchronous file sy

2019-09-17 02:06发布

我创建在谷歌扩展页面动作弹出。 我需要的时候弹出被封闭,写的内容回文件。 为此,我已附上window.unload事件。 在卸载处理程序我试图写入文件。 但自从我使用异步API,设置successHandler的后getFile功能,该页面被关闭,successHandler没有得到执行。 我在这里可以使用同步文件API? 我读了同步的API只能webworkers使用。 可它的扩展使用? 或者是有一些其他的方式来处理这种情况。 我粘贴我的代码为写入文件在这里

fileSystem.root.getFile(fileName, {create : true, exclusive : true}, function (fileEntry) {
                file.createWriter(function() {
                    window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder;
                    var bb = new BlobBuilder(); 
                    bb.append(JSON.stringify(credentialsObj));
                    fileWriter.write(bb.getBlob('text/plain'));                         
                }, errorHandler);
            }, errorHandler);

修改的问题最初发布

余移动上述一段代码到内容的脚本。 现在,我想在页面动作关闭与内容脚本进行通信。 为此,我有一个附加功能, window.onunload 。 我打开页面弹出行动在调试模式下,我执行location.reload(true) 。 然后我window.unload监听器获取调用和我程序控制到达内容脚本和代码运行。 但是,当我实际部署的延长,弹出会当用户点击比在弹出的某处其他关闭。 卸载处理是没有得到所谓的在这种情况下。 谷歌不提供任何事件时弹出关闭检测。 提供的唯一事件是,如果页操作有一个弹出式,不会触发click事件。 我该怎么办时,弹出被封闭检测?

Answer 1:

为了找到答案,创建一个测试用例。 下面的代码在一个被测试的背景页的控制台 。

 webkitRequestFileSystem(TEMPORARY, 1024);     // TypeError: Not enough arguments

下面的测试情况下, 使用Web工人 , 工作正常

// Create a worker for testing purposes
var blob = new Blob([
    'onmessage=function(e){postMessage(eval(e.data))}'
], {
    type: 'application/javascript'
});
var worker = new Worker((window.webkitURL || URL).createObjectURL(blob);
worker.onmessage = function(e) {console.log(e.data)};

// Test:
worker.postMessage('webkitRequestFileSystem(TEMPORARY, 1024)'); // No error
// For comparison, check whether we receive an error when something goes wrong:
worker.postMessage('webkitRequestFileSystem(0)');     // E: Not enough arguments

所以,同步文件系统API是不是一个Chrome扩展的范围内支持

代替在弹出做虚拟I / O的,可使用chrome.extension.getBackground()chrome.runtime.sendMessage将数据传递到后台,并让背景处理它。



文章来源: Can the synchronous file system api be used in a chrome extension