Ich habe eine Cocoa-App, die eine WebView verwendet, um eine HTML-Schnittstelle anzuzeigen. Wie würde ich eine Objective-C-Methode über eine JavaScript-Funktion innerhalb der HTML-Schnittstelle aufrufen?Wie ruft man eine Objective-C-Methode aus Javascript in einer Cocoa/WebKit App auf?
Antwort
Dies ist dokumentiert unter developer.apple.com.
Ich habe eine Lösung mit NimbleKit. Es kann Objective C-Funktionen von Javascript aufrufen.
wie sehr nett für Sie, wie wäre es, es zu teilen? – Jonathan
Wenn Sie will es in iPhone-Anwendungen zu tun, müssen Sie einen Trick, mit der UIWebViewDelegate Methode should tun:
Diese api http://code.google.com/p/jsbridge-to-cocoa/ macht es für Sie. Es ist sehr leicht.
Da Apple ziemlich grün ist, ist die Dokumentation für mich ziemlich unbrauchbar, deshalb habe ich in Cocoa einen Konzeptnachweis für das Aufrufen von Objective-C-Methoden aus JavaScript und umgekehrt erstellt, obwohl Letzteres viel einfacher war.
Zuerst sollten Sie sich Ihre webview als setFrameLoadDelegate haben:
[testWinWebView setFrameLoadDelegate:self];
Sie müssen die Webansicht sagen, für ein bestimmtes Objekt so schnell zu sehen, wie es geladen wird:
- (void)webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)windowScriptObject forFrame:(WebFrame *)frame {
//add the controller to the script environment
//the "ObjCConnector" object will now be available to JavaScript
[windowScriptObject setValue:self forKey:@"ObjCConnector"];
}
Dann das Geschäft der Kommunikation:
// a few methods to log activity
- (void)acceptJavaScriptFunctionOne:(NSString*) logText {
NSLog(@"acceptJavaScriptFunctionOne: %@",logText);
}
- (void)acceptJavaScriptFunctionTwo:(NSString*) logText {
NSLog(@"acceptJavaScriptFunctionTwo: %@",logText);
}
//this returns a nice name for the method in the JavaScript environment
+(NSString*)webScriptNameForSelector:(SEL)sel {
NSLog(@"%@ received %@ with sel='%@'", self, NSStringFromSelector(_cmd), NSStringFromSelector(sel));
if(sel == @selector(acceptJavaScriptFunctionOne:))
return @"functionOne"; // this is what you're sending in from JS to map to above line
if(sel == @selector(acceptJavaScriptFunctionTwo:))
return @"functionTwo"; // this is what you're sending in from JS to map to above line
return nil;
}
//this allows JavaScript to call the -logJavaScriptString: method
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)sel {
NSLog(@"isSelectorExcludedFromWebScript: %@", NSStringFromSelector(sel));
if(sel == @selector(acceptJavaScriptFunctionOne:) ||
sel == @selector(acceptJavaScriptFunctionTwo:))
return NO;
return YES;
}
Der Schlüssel ist, dass, wenn Sie mehrere Methoden haben Sie möchten sie aufrufen, Sie müssen sie alle in der Methode isSelectorExcludedFromWebScript ausschließen, und Sie benötigen den JavaScript-Aufruf, um die ObjC-Methode in webScriptNameForSelector abzubilden.
Voll Projekt Konzeptnachweis-Datei: https://github.com/bytestudios/JS-function-and-ObjC-method-connector
Danke für nützliche Informationen. Diese Antwort hilft mir wirklich sehr !! – Tommy
- 1. Wie ruft man eine in einer Einheit gespeicherte Funktion auf?
- 2. Wie ruft man eine JavaScript-Funktion auf einer von Electron gerenderten Webseite auf?
- 3. Wie ruft man eine Funktion in einer case-Anweisung auf?
- 4. Wie ruft man eine Elternmethode aus der Kindklasse in Javascript auf?
- 5. C++ Wie ruft man eine Elternklasse aus der Klasse auf?
- 6. Wie ruft man eine Funktion aus einer anderen Klasse in C++ auf?
- 7. Darwin und ObjectiveC - Wie ruft man Shell-Skripte aus einer Cocoa-App auf?
- 8. Wie ruft man eine JavaScript-Funktion sequentiell in einer for-Schleife auf?
- 9. Wie ruft man eine React-Komponente Funktion aus einer JavaScript-Funktion?
- 10. Wie ruft man eine JavaScript-Funktion in mehrere Funktionen zurück?
- 11. Wie man Scrapy Spider durch eine Django App ruft
- 12. Wie ruft man eine URL aus einer Java-Aktion in Struts auf?
- 13. Wie ruft man mehrere JavaScript-Funktionen im onclick-Event auf?
- 14. Wie ruft man zwei Modellfunktionen in einer Steuerung auf? LARAVEL
- 15. Wie ruft man eine Subclass-Methode aus einer Superclass-Methode auf?
- 16. Wie ruft man eine C# -Funktion von Javascript?
- 17. javax script wie man eine Funktion in JavaScript aus Java ruft
- 18. Wie ruft man eine .exe von PL/SQL auf?
- 19. Meteor Wie ruft man eine in Meteor.methods() definierte Methode auf?
- 20. Wie ruft man Member-Funktionen aus einem Maus-Handler auf?
- 21. Wie ruft man eine Methode nur auf, wenn die App gestartet wurde? Bitte sehen Sie Details
- 22. Ruft eine überschriebene Methode aus der Superklasse in Typoskript auf
- 23. Wie ruft man eine Funktion auf einer Variablen in PHP auf?
- 24. Wie "ruft" eine Klasseninstanz in PHP auf?
- 25. Wie ruft man eine App auf, ohne ihren vorherigen Zustand zu verlieren?
- 26. Wie ruft man eine Funktion mit Argumenten in einer ES6-Klasse auf?
- 27. Wie teilt man eine JavaScript Codebase in Module auf?
- 28. Wie ruft man eine Elternmethode aus der Kendo Template-Bindung auf?
- 29. Wie ruft man eine Funktion zum Rendern von Elementen in einer 'ng-repeat'-Direktive auf?
- 30. Wie ruft man eine Funktion aus der globalen API in Angular Expressions auf?
Danke, irgendwie verpasst, dass in meinem Google sucht :) – georgebrock
Für jedermann für iOS Hilfe suchen, beachten Sie, dass die oben genannte Antwort ist Mac-only. – zekel
Beachten Sie, dass sich der Link geändert hat, sodass diese Nur-Link-Antwort nicht mehr nützlich ist. –