我们有一个使用 Phonegap 3.6.3 的应用程序,并使用 Phonegap build 构建。 作为此应用程序的一部分,我们需要将文件下载到用户的设备上。该文件可能是 .pdf、图像或任何二进制文件。
我们希望在应用程序中通过 blob:file 链接下载文件,而不是使用 file-transfer 等插件。
该文件是从 Base64 数据转换而来的,并创建了一个 Blob 对象。 objectURL 通过 window.URL.createObjectURL() 生成,并将其添加到 a 元素的 href 属性中。
DOM 包含以下内容
<a href="blob:file%3A///cf2e336c-8c10-4e54-9e99-26f7d5a0115f" download="1.jpg" style="display: none;"></a>
在桌面上,这可以正常工作,但在与 cordova 3.6.3 一起打包的应用程序中,它只是默默地失败。
我怀疑这与 cordova 中的白名单功能有关。 在问题中https://stackoverflow.com/a/31945728/250787其他人已经使用 cordova-plugin-whitelist 解决了同样的问题。 不幸的是,这个插件仅适用于 cordova 4.0+
我尝试使用访问源元素,但所有语句似乎都没有效果
<access origin="blob:*" launch-external="yes" />
<access origin="blob:*"/>
我已经有一个访问源来限制应用程序主后端系统的流量
<access origin="https://mobilbackend.mycompany.com/*"/>
如何解决这个问题?
最佳答案
好的。 blob:
需要对 whitelist
进行特殊添加系统,您似乎对其了解不完全_或者_正在使用过时的文档。我可以这么说,因为 launch-external="yes"
已停止使用。
- 您需要同时使用
whitelist
插件并添加<meta (...) />
进入我们的.html
的标题页。 - 您需要实现cordova-plugin-whitelist .
- 此白名单工作表应该会有所帮助。 HOW TO apply the Cordova/Phonegap the whitelist system
请注意,这样做会使您的应用程序不安全。保护您的应用程序的安全取决于您。
将此添加到您的 config.xml
<plugin name="cordova-plugin-whitelist" source="npm" spec="1.1.0" />
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" /> <!-- Required for iOS9 -->
请注意,您的应用程序现在不安全。保护您的应用程序的安全取决于您。
将以下内容添加到您的 index.html
以及每个.html
页。
<meta http-equiv="Content-Security-Policy"
content="default-src * blob:;
style-src * 'self' 'unsafe-inline' 'unsafe-eval';
script-src * 'self' 'unsafe-inline' 'unsafe-eval';">
我已添加blob:
进入CSP
定义。然而,这只是打开应用程序以允许 blob:
网址。我仍然不清楚当你说“下载文件”时你的意思,如 blob:
不是传输协议(protocol)。它只是为了定义 type of file .
我还建议阅读此文 whitelist worksheet ,请务必阅读9. CSP (Content Security Policy) 最后,如果您想继续讨论,请继续Google Groups
关于file - Phonegap/Cordova 3.6 - 通过 blob 下载文件 :file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34356724/