2015-04-01 32 views
1

使用pdf.js中的查看器我成功设法打开了一个InAppBrowser的本地pdf文件。下面的代码在iOS上没有任何缺陷:InAppBrowser打开并显示与查看器的pdf!本地文件不能使用pdf.js查看器://在Android上,在iOS上工作

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:///的跨源请求?这是问题吗?
感谢您的帮助。

+0

文件是否存在于路径中? – Raptor 2015-04-01 01:44:29

+0

它呢!我可以成功地做'file.moveTo(destination,'newname');' – Clawish 2015-04-01 01:47:01

+0

我注意到你在模拟器上。这是否适用于真正的Android设备? – Raptor 2015-04-01 01:49:33

回答

0

你是否明确启用了你的webview通过javascript从URL请求文件?

这适用于Android API 15及以下版本。但是,默认设置为false的API 16以上,这意味着你必须调用:

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

相关问题