Cordova/PhoneGap Open Downloaded File (InAppBrowser)

cordova, inappbrowser

Solution

I THINK I have a solution to this, but it's kinda nasty.

I grepped through the cordova JAVA and looked for places it constructed a file entry JSON object. Specifically by looking for places where its adding `fullPath` to the object.

I added an additional entry for "fullAbsolutePath" with the value `[file].getAbsolutePath()`, where `[file]` is whatever java.io.file instance is nearby. I did this in all the places I could find just to be safe and because it doesn't seem to hurt anything.

Then I modified FileEntry.js and File.js in the plugins\file folder to also populate that value to the file entry object.

Still trying to work out the kinks, but I believe I'm on the right track...

I think a better solution would be to modify the inAppBrowser plugin to recognize and resolve the cordovaFile:// protocol and im sure they obscured the absolute file system path on purpose - but that might be a bit beyond me.

EDIT - Yup! this works! I can now take a file entry, call the file method, then read fullSystemPath off the fileObject. Value is like "/storage/emulated/0/whatever/" on my android. Just need to prepend "file://" and window.open will accept it.

Problem

Using Cordova/PhoneGap 3.3.0, I am downloading a file using the FileTransfer plugin, and then trying to open it using the InAppBrowser plugin. I can download the file successfully, and place it in the temp directory. Since the File plugin now uses URL schema, I cannot figure out how to pass the correct url/path to the `window.open` method of the InAppBrowser plugin. I cannot find any relevant documentation either. All of the "download and open" documentation I can find is out of date and pre-URL-schema. Relevant links: - Cordova Release info on New Plugin Versions - The readme for the FileTransfer plugin - The readme for the InAppBrowser plugin - How to open local file with InAppBrowser with recent changes to URL scheme in File plugin - Similar question Out of date examples I found: - File-transfer download file issue on Cordova 3.1 - This user downgraded to an earlier version because they couldn't figure it out - https://gist.github.com/devgeeks/4982983 - This example uses `entry.fullPath`, which is now deprecated in favor of `toURL()` Here is my code: ``` var uri = encodeURI("http://some.url/file.pdf"); window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, function (fileSystem) { var fileTransfer = new FileTransfer(); var filename = fileSystem.root.toURL() + uri.substr(uri.lastIndexOf("/") + 1); fileTransfer.download(uri, filename, function(entry) { // download success var path = entry.toURL(); //**THIS IS WHAT I NEED** window.open(path, "_system"); }, function(error) {} // irrelevant download error ); }, function(error) {} // irrelevant request fileSystem error ); ``` I am currently testing in Android on a Nexus 7 and Nexus 5. The InAppBrowser correctly opens the default pdf launcher (in my case Adobe Reader), but then I get a "The document path is not valid" error. [Update: showing return values] I have tried all of the following combinations for the file path: ``` var path = entry.toURL(); // "cdvfile://localhost/temporary/file.pdf" var path = entry.fullPath; // "file.pdf" var path = fileSystem.root.toURL() + filename; // "cdvfile://localhost/temporary/file.pdf" var path = fileSystem.root.fullPath + filename; // "/file.pdf" ```

Original source

Related problems