我知道周围有很多这样的问题,但我的问题似乎与其他问题略有不同。我真正想做的就是从 javascript 调用一个客观的 C 方法。我确信有一种方法可以做到这一点,而不必像许多答案和教程中所建议的那样来回发送参数。这样做的目的是让我的 phonegap 应用程序的用户能够单击 HTML 按钮来隐藏状态栏。为此,我必须找到一种方法来告诉我的应用程序运行我的目标 C 方法:HideStatusBar
-(void) HideStatusBar {
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
}
我不想发送任何参数,我要求你向我解释的是如何告诉 obj c 从 javascript 进行方法调用。我知道一种解决方案是将参数设置到 webviews 地址字段中,然后通过 obj C 获取,但我确信在我的情况下有更简单的解决方案。
我开始尝试编写一个 phonegap 插件,但我从来没有得到“消息越过”到“另一边”,因此目标 C 中的方法调用由于某种原因从未发生过。如果您愿意,我可以在此处发布代码,但我认为必须有一个更简单的解决方案。
任何人都可以向我解释从 javascript 中调用 obj c 方法的最简单方法吗?
编辑
我得到了这个工作,但shouldStartLoadWithRequest
唯一在第一次加载 webview 时被调用(如标题所示)。这意味着如果我更新 URL,则不会调用该方法。这就是我现在的做法:
Javascript
('#hideStatusBar').live('click',function(event) {
window.history.pushState('page2', 'Title', '/doc.html://hideStatusBar');
});
目标 C
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType {
//NSString *currentURL = request.URL.absoluteString;
if([request.URL.absoluteString isEqualToString:@"http://domain.com/doc.html://hideStatusBar"]){
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
return NO;
}
return YES;
}
如前所述,我希望每次通过 javascript 更新 HTML 文档的 URL 时都运行此方法。还有什么想法吗?