【发布时间】:2021-01-22 20:39:13
【问题描述】:
API 30 在 WebView 中引入了与文件访问相关的更改:
/**
* Enables or disables file access within WebView.
* Note that this enables or disables file system access only. Assets and resources
* are still accessible using file:///android_asset and file:///android_res.
* <p class="note">
* <b>Note:</b> Apps should not open {@code file://} URLs from any external source in
* WebView, don't enable this if your app accepts arbitrary URLs from external sources.
* It's recommended to always use
* <a href="{@docRoot}reference/androidx/webkit/WebViewAssetLoader">
* androidx.webkit.WebViewAssetLoader</a> to access files including assets and resources over
* {@code http(s)://} schemes, instead of {@code file://} URLs. To prevent possible security
* issues targeting {@link android.os.Build.VERSION_CODES#Q} and earlier, you should explicitly
* set this value to {@code false}.
* <p>
* The default value is {@code true} for apps targeting
* {@link android.os.Build.VERSION_CODES#Q} and below, and {@code false} when targeting
* {@link android.os.Build.VERSION_CODES#R} and above.
*/
public abstract void setAllowFileAccess(boolean allow);
通过首先下载 PDF 然后通过"file:///android_asset/pdfjs/web/viewer.html?file=${path/to/file}" 显示它来使用 PDF.js 的应用程序将不再工作。强制 setAllowFileAccess 到 true 是可能的,但不鼓励。
建议使用WebViewAssetLoader 作为替代方案,但它似乎适用于侧重于从/assets 目录或/res 目录加载本地文件的用例。
问题:
- 考虑到 API 30 中添加的限制,如何使用 PDF.js 加载本地 PDF 文件?
- 有没有办法使用
WebViewAssetLoader来加载保存在应用程序本地存储中的文件?
【问题讨论】:
-
这个运气好吗?我尝试了 base64 方法并使其正常工作,但该解决方案无法生成大型 PDF:/
标签: android pdf android-webview pdf.js android-storage