如何使用原生Objective-C方法从本地HTML5文件中的javascript函数调用原生Objective-C方法,反之亦然?
我想调用如下JavaScript函数:如何使用原生Objective-C方法从本地HTML5文件中的javascript函数调用原生Objective-C方法,反之亦然?,javascript,objective-c,xcode,Javascript,Objective C,Xcode,我想调用如下JavaScript函数: - (void)alertMe:(NSString *)msg { [[[UIAlertView alloc] initWithTitle:@"Alert" message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show]; } 及 如果HTML文件加载到XCode中的UIWebView中,我如何使用XCode调用它?使用委托方法UIWebView -(BOOL)w
- (void)alertMe:(NSString *)msg {
[[[UIAlertView alloc] initWithTitle:@"Alert" message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
}
及
如果HTML文件加载到XCode中的UIWebView中,我如何使用XCode调用它?使用委托方法UIWebView
-(BOOL)webView:(UIWebView*)webView应该加载请求:(NSURLRequest*)请求导航类型:(UIWebView导航类型)导航类型
为javascript函数实现查询字符串您可能希望为javascript函数实现查询字符串,例如:
function getQueryString(){
var mySearch = window.location.search.substr(1).split("&");
if (mySearch!="")
{
for(var x=0;x<mySearch.length;x++) {
// loop to all your query string here
}
}
}//end function
Bu此方法只能在webViewDidFinishLoad:(UIWebView*)webView
中调用和/或在webView:(UIWebView*)中调用时,webView应加载WithRequest:(NSURLRequest*)请求导航类型:(UIWebViewNavigationType)navigationType
方法返回的必须是否
,您可以使用它轻松实现从JavaScript
调用本机Objective-C
方法。
更方便的方法是实现一个类,该类包含JS
将调用的所有方法,并使用UIWebView控件对象子类以EasyJSWebView作为参数实例化该类
例如:
我创建了一个类JSInterface
来保存我所有的原生Obj-C方法
我有一个自定义方法
- (void)initializeJSInterfaceForWebView:(EasyJSWebView *)webView {
self.jsInterface.appDelegate = appDelegate;
self.jsInterface.webView.delegate = self;
[webView addJavascriptInterfaces:self.jsInterface WithName:@"nativeInterface"];
}
这将初始化EasyJSWebView
我举例说明
self.jsInterface = [JSInterface initWithView:self];
[self initializeJSInterfaceForWebView:self.webView];
例如,我们有一个原生的Objective-C
方法:
- (void) printLog:(NSString *)msg {
NSLog(@"%@", msg);
}
使用nativeInterface
对象名从JavaScript
调用本机方法,如下所示:
nativeInterface.printLog("This is only a test.");
询问代码的问题必须证明对正在解决的问题的最低理解。包括尝试的解决方案,为什么它们不起作用,以及预期的结果。感谢您的回答。。。这对我帮助很大D这个答案更灵活,我认为更合适。
- (void) printLog:(NSString *)msg {
NSLog(@"%@", msg);
}
nativeInterface.printLog("This is only a test.");