Ios Objective-C在UIWebView中调用javascript调用Objective-C;线程问题
我有一个基于UIWebView的应用程序,它正在存储一些状态。我有一个本地标签栏和上栏。我需要的是,当我单击本机栏时,我将保存UIWebView中存储的数据 为此,我调用evaluateJavaScriptByString来创建一个JSON对象,它通过UIWebViewDelegate协议回调objective-C 但是,我发现回调是异步的,因此我的主事务发生在加载数据之前 你知道如何解决这个问题吗 更新:为了更好地解释问题:-Ios Objective-C在UIWebView中调用javascript调用Objective-C;线程问题,ios,uiwebview,Ios,Uiwebview,我有一个基于UIWebView的应用程序,它正在存储一些状态。我有一个本地标签栏和上栏。我需要的是,当我单击本机栏时,我将保存UIWebView中存储的数据 为此,我调用evaluateJavaScriptByString来创建一个JSON对象,它通过UIWebViewDelegate协议回调objective-C 但是,我发现回调是异步的,因此我的主事务发生在加载数据之前 你知道如何解决这个问题吗 更新:为了更好地解释问题:- 我有一个HTML页面,其中包含一个表单,有人将一些数据放入其中
- 我有一个HTML页面,其中包含一个表单,有人将一些数据放入其中李>
- 我的标签栏是本地的
- 单击选项卡栏上的按钮,我希望将HTML中的数据保存到Objective-C模型中,并且视图应更改为其他视图李>
注意,我知道如何从WebView调用OBjective-C函数。无论如何,我们都在使用JSOBjBridge。只需添加如下内容
@“some\u var=MAKE\u JSON();window.location=\”myapp://callback/\“+escape(some_var)”
在javascript代码末尾,您可以将其转移到evaluateJavaScriptByString:
在UIWebView的委托中,实现webView:shouldStartLoadWithRequest:navigationType:并捕获带有myapp://
前缀的所有URL,如下所示:
- (BOOL) webView: (UIWebView *) webView
shouldStartLoadWithRequest: (NSURLRequest *) request
navigationType: (UIWebViewNavigationType) navigationType {
NSString *url = @"myapp://";
NSString *path = request.mainDocumentURL.relativePath;
NSString *callbackURL = @"callback/";
if ( [path hasPrefix:url] ) {
path = [path substringFromIndex:[url length]];
if ( [relPath hasPrefix:callbackURL] ) {
NSString *json = [path substringFromIndex:[callbackURL length]];
//TODO: Work with json
}
return NO;
}
return [super webView:webView shouldStartLoadWithRequest:request navigationType: navigationType];
}
我没有测试这段代码,我只是从头开始编写,但它应该可以工作,我已经这样做了。使用JSObjBridge已经发生了这种情况。问题不是这样。为了更好地解释这个问题:-如果我理解正确,您可以在tabbar controller:shouldSelectViewController:中返回NO,并在数据写入模型时手动更改选项卡,这可以使用notificationcenter完成。不管怎样,什么是JSObjBridge?是您的还是第三方的?是的,JSOBjBridge是第三方,但从Javascript调用Obj-C函数是相当标准的。需要了解notificationcenter。如果可以修改JSOBjBridge的源,请在从WebView接收数据时添加发送通知,并在应用程序中为此通知调用addObserver。==如果不能修改JSOBjBridge,则需要使用键值观察来观察更改模型的数据。