gpt4 book ai didi

javascript - 从 JavaScript 调用 Objective C 方法的最简单方法(无需插件)?

转载 作者:行者123 更新时间:2023-12-02 19:01:09 24 4
gpt4 key购买 nike

我知道周围有很多这样的问题,但我的问题似乎与其他问题有点不同。我真正想做的就是从 javascript 调用 Objective-C 方法。我确信有一种方法可以做到这一点,而不必按照许多答案和 tutorials 中的建议来回发送参数。 。这样做的目的是让我的phonegap应用程序的用户能够单击HTML按钮来隐藏状态栏。为此,我必须找到一种方法来告诉我的应用程序运行我的 Objective C 方法:HideStatusBar

-(void) HideStatusBar {
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
}

我不想发送任何参数,我只要求你向我解释如何告诉 obj c 从 javascript 进行方法调用。我知道一种解决方案是将参数设置到 webviews 地址字段,然后通过 obj C 获取,但我确信在我的情况下有更简单的解决方案。

我一开始尝试编写一个phonegap插件,但我从未得到“另一边”的“消息accross”,因此在 objective-c 中调用方法由于某种原因从未发生过。如果您愿意,我可以在这里发布代码,但我认为必须有一个更简单的解决方案。

任何人都可以向我解释一下从 javascript 调用 obj c 方法的最简单方法吗?

编辑

我成功了,但是shouldStartLoadWithRequest仅在首次加载 webview 时被调用(如标题所示)。这意味着如果我更新 URL,则不会调用该方法。这就是我现在的做法:

Javascript

('#hideStatusBar').live('click',function(event) {
window.history.pushState('page2', 'Title', '/doc.html://hideStatusBar');
});

objective-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 时都运行此方法。还有其他想法吗?

最佳答案

最简单且在我看来错误的方法是使用 UIWebViewDelegate 方法 shouldStartLoadWithRequest。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType {
//suppose you call yourApp://hideStatusBar
if([request.url.absoluteString isEqualToString:@"yourApp://hideStatusBar"]){
[self hideStatusBar];
return NO;
}
return YES;
}

来自 JavaScript

document.location = 'yourApp://hideStatusBar'

如果您已经使用 Cordova(Phonegap),您可以构建一个简单的插件以避免弄乱请求。

关于javascript - 从 JavaScript 调用 Objective C 方法的最简单方法(无需插件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14782948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com