使用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
这绝对与问题有关。
导致以下屏幕。
我不知道如何修复错误。再一次,它在iOS上运行完美!我能做些什么才能让它在Android上运行?如何为file:///
启用跨源请求?这是问题吗?
谢谢你的帮助。
答案 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