Comments (2)
[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.
[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)
- Help/Q - ReferenceError: Can't find variable: macgap HOT 1
- My app not closed HOT 1
- Support for macOS Big Sur HOT 1
- Signing my App for Appstore distribution HOT 3
- Transparent titlebar seems not work on Big Sur
- Persistent Cookies
- Contribution? HOT 4
- Commands from Obj-C to JS and vice-versa?
- is it possible to allow generic HTML5 notifications by default? HOT 8
- Invalidated connection to com.apple.nsurlstorage-cache
- Refreshing app doesn't reload javascript or html files
- NSURLConnection finished with error - code -1100
- can't use html input element which is under toolbar HOT 1
- Any plans for FFI? HOT 1
- MacGap bad behaviour in Mojave 10.14.4 beta HOT 1
- macOS Catalina support? HOT 2
- Remember passwords? HOT 2
- Flashing top bar while scrolling HOT 6
- How to modify the scrollbar color? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from macgap2.