cordova-plugin-file icon indicating copy to clipboard operation
cordova-plugin-file copied to clipboard

Resolve URLs with more than one colon fails

Open GitToTheHub opened this issue 3 years ago • 1 comments

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

GitToTheHub avatar Dec 07 '21 15:12 GitToTheHub

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.

peitschie avatar May 25 '22 03:05 peitschie