2015-04-01 91 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