Firefox Web扩展 - 读取本地文件(上次下载的文件)

时间:2017-08-28 12:35:05

标签: firefox xmlhttprequest filereader

我正在创建一个Web扩展并从XUL移植。我曾经能够轻松地用

读取文件
If

以上内容将被弃用。

我可以使用downloads.download()来了解最后一次下载是什么,但我无法读取该文件,然后获取encode_data_to_send_via_xmlhttp的等效文件

此外,在Firefox 57以后,意味着我必须尝试通过按钮点击或某事件伪造用户操作,或上传文件。

For Each C In copyRng
    If IsNumeric(C) And C.Value <> "0" And Len(C) <> 0 And C.Value <> "2017" Then
        Set rowRange = xSheet.Range(C, C.EntireColumn.Cells(1))

        For Each q In rowRange
            If InStr(1, q.Value, "C-") And Not ISIN(C, uniqueVal) Then Set rowSrc = q
            If InStr(1, q.Value, "Total") Then Exit For ' Exit loop prematurely
        Next q
        If q is Nothing Then ' Skip if loop was exited prematurely
            Set colSrc = C.EntireRow.Offset(0).Cells(1)
            numCol = DestSh.Cells.Find(colSrc.Value, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Column
            numRow = DestSh.Cells.Find(rowSrc.Value, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Row

            Set destRng = DestSh.Cells(numRow, numCol)
            C.Copy destRng
        End If
    End If
Next C

是不是有一种简单的方法可以读取上次下载的文件?

2 个答案:

答案 0 :(得分:6)

WebExtension API不再允许扩展程序读取本地文件。您可以让扩展获得CORS权限并直接从URL通过fetch()XMLHttpRequest()作为blob读取内容并直接存储到IndexedDB或内存,然后编码并发送到服务器。这附带many restrictions and limitations,例如您可以从哪个来源读取等等。

此外,这可能会添加许多不需要的步骤。如果目前在目前的问题中,目的是与服务器共享下载的文件,我建议您获取最后一个DownloadItem对象,提取URL({{1} })从该对象发送 URL 返回服务器。

这样服务器可以直接从该URL加载(如果需要,可以在服务器上对其进行编码)。网络负载大致相同(实际上稍微少一点,因为没有涉及Base64编码,这增加了33%的大小),并且客户端的负载更少。服务器将数据读取为二进制/字节数据流;与数据直接从扩展程序发送的情况大致相同。

要获取上次下载的文件,您可以从特权脚本执行以下操作:

.url

答案 1 :(得分:2)

根据this support mozilla question

  

(2)本地文件安全性

     

Firefox限制从Web服务器上的页面访问本地磁盘或UNC路径上的页面。 [...])。

哪种解决方案?

和/或

  • 在客户端运行一个小型本地Web服务器,假设服务器以足够的权限运行,您最终可以通过http://访问任何本地内容(但仍然不能使用file:///)