Git Product home page Git Product logo

Comments (2)

loretoparisi avatar loretoparisi commented on August 15, 2024

[UPDATE]
Okay, I have found out the issue with the new frame / frame delegates, I was in fact missing the latter WebPolicyDecisionListener listener:

- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation
        request:(NSURLRequest *)request
        frame:(WebFrame *)frame
        decisionListener:(id<WebPolicyDecisionListener>)listener
{
    if (WebNavigationTypeLinkClicked == [[actionInformation objectForKey:WebActionNavigationTypeKey] intValue])
    {
        NSLog(@"CLICKED %@", [request URL]);
    }
    [listener use]; // Say for webview to do it work...
}

So I guess now I need to handle the download policy here in some way...

from macgap2.

loretoparisi avatar loretoparisi commented on August 15, 2024

[UPDATE] - PART II
So, in the Objective-C / Cocoa Realm I have approached the following

NSLog(@"CLICKED %@", [request URL]);
        NSString *needle = @"blob:";
        if( [[[request URL] absoluteString] hasPrefix:needle] ) {
            // create a download link from blob url
            NSRange blobRange = [[[request URL] absoluteString] rangeOfString:needle];
            NSString * blobURL = [[[request URL] absoluteString] substringFromIndex:blobRange.location + needle.length];
            NSURLRequest *downloadURLRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:blobURL]];
            NSLog(@"BLOB URL:%@", [[downloadURLRequest URL] absoluteString]);
            NSURLSessionDownloadTask *downloadTask = [[NSURLSession sharedSession] downloadTaskWithRequest:downloadURLRequest
                                                                                         completionHandler:^(NSURL *location, __unused NSURLResponse *response, NSError *error) {
                if (location) {
                    
                    // get download folders
                    NSArray *docDirs = NSSearchPathForDirectoriesInDomains(NSDownloadsDirectory,
                                                                           NSUserDomainMask, YES);
                    NSString *destinationFilename = [docDirs objectAtIndex:0];
                    if (destinationFilename) {
                        destinationFilename = [destinationFilename stringByAppendingPathComponent:@"out.json"];
                        NSLog(@"LOCATION %@ DOWNLOAD %@", [location absoluteString], destinationFilename);
                        NSFileManager *fileManager = [NSFileManager defaultManager];
                        NSError *anError = nil;
                        NSString *fromPath = [location path];
                        if ([fileManager fileExistsAtPath:destinationFilename])
                            [fileManager removeItemAtPath:destinationFilename error:&anError];
                        BOOL fileCopied = [fileManager moveItemAtPath:fromPath toPath:destinationFilename error:&anError];
                        if (fileCopied == NO) {
                        
                        } else {
                            NSLog(@"Downloaded!");
                        }
                    }
                } else {
                    NSLog(@"Error:%@", [error description]);
                }
            }];
            [downloadTask resume];
            return;
        }

Basically I intercept the blob: urls that is a typical HTML5 Blob url, and I try to download, but - of course 😁 it does not work because that url it seems not be a valid url, so I get an error back from the file server - of coruse

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /57de17ae-92bc-4553-a9d8-ac1b0f1f6c4f</pre>
</body>
</html>

So despite the fact that the code above is generally working fine for real files (i.e. having a valid URI), I was wrong about the Blob files, since these files are not actual files, so there must be a different way to handle this...

from macgap2.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.