cordova-plugin-file
cordova-plugin-file copied to clipboard
Resolve URLs with more than one colon fails
Bug Report
If I try to resolve something like http://localhost:8000/index.html
i get an ENCODING_ERR
because of these lines:
https://github.com/apache/cordova-plugin-file/blob/3e588763a5e49ea441a996bf4139efdf6f6a5f11/www/resolveLocalFileSystemURI.js#L55-L62
When i disable this code like i did here https://github.com/GitToTheHub/cordova-plugin-file/pull/1, I can finally resolve urls like http://localhost:8000/index.html
. Do someone know why these lines of code exist and if it's safe to remove them? I would make an PR without these lines, or by allowing maximum 2 colons.
Problem
What is expected to happen?
URLs like http://localhost:8000/index.html
should resolve
What does actually happen?
The API throws ENCODING_ERR
Information
Just run the app in a browser and try to resolve http://localhost:8000/index.html
.
Command or Code
resolveLocalFileSystemURL(
"http://localhost:8000/index.html",
(fileEntry) => {
alert("URL successfully resolved! name=" + fileEntry.name);
},
(fileError) => {
alert("URL could not be resolved: " + fileError.code);
}
);
(Something to note: When i try to resolve a wrong url with my changed code, to allow more than one colon, the errorcallback will not be invoked)
Environment, Platform, Device
Browser platform, but this issue will occure in any other platform also.
Checklist
- [x] I searched for existing GitHub issues
- [x] I updated all Cordova tooling to most recent version
- [x] I included all the necessary information above
Just noting this change has bit me also. Prior to the v7 update with the changes to support the custom asset loading on Android, you could safely call resolveLocalFileSystemURL
with the result of a Entry.toInternalURL()
or similar as that would always return a file://
or cdvfile://
URL on android. Now, it's only safe to call this with something that comes from entry.nativeURL
.
I've adapted my own code to use the .nativeURL
entry instead... but, interesting to note.
In my use case, I need to take a file path and save to local storage, and then after a subsequent app restart I reload the data from the previously saved file. Previously I was storing the result of toInternalURL()
... now I'm storing the result of .nativeURL
isntead.