我正在创建一个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
是不是有一种简单的方法可以读取上次下载的文件?
答案 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路径上的页面。 [...])。
哪种解决方案?
和/或