You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by GitBox <gi...@apache.org> on 2021/09/22 09:26:12 UTC

[GitHub] [cordova-android] regnete edited a comment on issue #1329: WebViewAssetLoader: Application private path Raw File access at JavaScript using XMLHttpRequest fails.

regnete edited a comment on issue #1329:
URL: https://github.com/apache/cordova-android/issues/1329#issuecomment-924648282


   Facing similiar issue when using an absolute file url:
   ```javascript
   lFileUrl = 'file:///data/user/0/com.company.stub/files/myfolder/IMG-20210826-204423558thumb.jpg'
   xhr.open("GET", lFileUrl, true);
   xhr.onload = function() {
      console.log('loaded');
   }
   try {
       xhr.send();
   } catch (e) {
       console.error(e);
   }
   ```
   Error message on console:
   
   `Not allowed to load local resource: file:///data/user/0/com.company.stub/files/myfolder/IMG-20210826-204423558thumb.jpg`
   
   Solution could be to provide something similar to `window.WkWebView.convertFilePath('your/file/path');` from `cordova-ios`.
   see https://github.com/apache/cordova-ios/blob/715c2dbfb273fb33721e8cf3f989ce7b20892d32/cordova-js-src/plugin/ios/wkwebkit.js#L28
   
   ```javascript
   
   async function resolveLocalFileSystemURL(uri){
           return new Promise(function (resolve, reject) {
               window.resolveLocalFileSystemURL(uri, resolve, (cause) => {
                   if (cause.code == FileError.NOT_FOUND_ERR)
                       resolve(null);
                   else reject({cause, uri, message: "cannot resolve local file system url"})
               });
           });
   }
   
   async function convertFilePath(uri){
      if(uri.startsWith('file://'){
         const resolved = await this.utils.resolveLocalFileSystemURL(uri);
          uri = resolved.toInternalURL().replace("cdvfile://localhost/", "https://" + location.host + "/");
      }
      return uri;
   }
   
   lFileUrl = await convertFilePath('file:///data/user/0/com.company.stub/files/myfolder/IMG-20210826-204423558thumb.jpg');
   xhr.open("GET", lFileUrl, true);
   xhr.onload = function() {
      console.log('loaded');
   }
   try {
       xhr.send();
   } catch (e) {
       console.error(e);
   }
   ```
   Error message in chrome debugger network panel: `net::ERR_CONNECTION_REFUSED`
   
   Looks like https://github.com/apache/cordova-android/blob/015db819aed3f35892d2b6035781ea4bd752149d/framework/src/org/apache/cordova/engine/SystemWebViewClient.java is missing a https://developer.android.com/reference/androidx/webkit/WebViewAssetLoader.InternalStoragePathHandler to make `file:///data/user/0/com.company.stub/files` available at `https://localhost/files/....`. The solution should pbe able to provide access to all locations mentioned here: https://github.com/apache/cordova-plugin-file#android-file-system-layout


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org