-
Notifications
You must be signed in to change notification settings - Fork 84
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Download a file via HTML5 Blob API: Failed to get remote object proxy #91
Comments
[UPDATE] - (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... |
[UPDATE] - PART II 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 <!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 |
I'm using the recent (actually not so recent) HTML5 Blob API to download a file from a JavaScript client like
When the
Blob
is not supported it uses the standard DOM way.When I run my application within MacGap2 running this code called let's say like:
will lead to this error:
I'm not sure if this is connected to the secure transport due to the
NSAppTransportSecurity
, but in my case I'm creating a downloadable content on the fly, which url is onlocalhost
.I have also tried to intercept the link click through the
PolicyDelegate
, but for some reason I do not get any log here:The text was updated successfully, but these errors were encountered: