无法在Android上使用pdf.js查看器用于本地文件://,适用于iOS

时间:2015-04-01 01:30:35

标签: android cordova xmlhttprequest cors pdf.js

使用pdf.js中的查看器,我成功设法使用InAppBrowser打开本地pdf文件。以下代码在iOS上没有任何缺陷:InAppBrowser打开并显示带有查看器的pdf!

window.resolveLocalFileSystemURL(fileURL, function (file) {
    window.open('lib/pdf.js-master/web/viewer.html?file=' + file.toURL(), '_blank', 'location=no')
}, fail);

file.toURL()呈现file:///blabla/bla之类的内容 但是,在Android上,pdf无法加载,导致控制台错误

"XMLHttpRequest cannot load file:///android_asset/www/lib/pdf.js-master/web/locale/locale.properties. Cross origin requests are only supported for HTTP.", source: file:///android_asset/www/lib/pdf.js-master/web/viewer.html?file=file:///storage/emulated/0/Android/data/xxxxxxxxx/cache/677.pdf

并且甚至没有www/lib/pdf.js-master/web/locale/locale.properties文件...我不知道这是否与问题有关,但我在此处将其包括在内。
但接下来是错误

"XMLHttpRequest cannot load file:///storage/emulated/0/Android/data/xxxxxxxxx/cache/677.pdf. Cross origin requests are only supported for HTTP.", source: file:///android_asset/www/lib/pdf.js-master/web/viewer.html?file=file:///storage/emulated/0/Android/data/xxxxxxxxx/cache/677.pdf

这绝对与问题有关。
导致以下屏幕。 enter image description here

我不知道如何修复错误。再一次,它在iOS上运行完美!我能做些什么才能让它在Android上运行?如何为file:///启用跨源请求?这是问题吗?
谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您是否已明确启用webview以通过javascript从URL请求文件?

默认情况下适用于Android API 15及更低版本。但是,对于API 16及更高版本,默认设置为false,这意味着您必须调用:

setAllowFileAccessFromFileURLs(true);

以下是一个完整的例子:

// create a webview with javascript enabled
WebView mWebView = (WebView) findViewById(R.id.webview);
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setAllowFileAccessFromFileURLs(true);

// finally load your pdf.js html file with the correct parameters
mWebView.loadUrl("file:///android_asset/pdfviewer/...");

然后,为了使其适用于InAppBrowser,请在src/android/InAppBrowser.java中的第657行之后添加以下内容:

settings.setAllowFileAccessFromFileURLs(true);

您还可以查看此问题,了解覆盖WebView设置的其他方法:Building custom WebView With Cordova 5.0 in Android