ios - Objective-C 在 UIWebView 中调用 javascript 回调 Objective-C;线程问题

标签 ios uiwebview

我有一个基于 UIWebView 的应用程序正在存储一些状态。但是,我有一个本地标签栏和上栏。我需要的是当我点击原生栏时,我持久化存储在 UIWebView 中的数据。

为此,我调用了 evaluateJavaScriptByString 来创建一个 JSON 对象,它通过 UIWebViewDelegate 协议(protocol)对 Objective-C 进行回调。

但是,我发现回调是异步的,因此我的主要事务发生在数据加载之前。

知道如何解决这个问题吗?

更新:为了更好地解释问题:-

  • 我有一个 HTML 页面,其中包含有人将一些数据放入其中的表单。
  • 我的标签栏是原生的。
  • 单击选项卡栏上的按钮时,我希望将 HTML 中的数据保存到 Objective-C 模型中,并且 View 应更改为其他 View 。

发生的事情是,一旦我单击按钮,javascript 调用就会发生在页面上(以创建一个 JSON 字符串发送到 Objective-C),并且该数据会保存到 obj-c 模型中。但是,这是异步发生的。所以在数据加载到模型之前我的屏幕发生了变化。如果我刷新下一个屏幕,它会显示正确的数据。我想知道是否有办法解决这个问题。

请注意,我知道如何从 WebView 调用 OBjective-C 函数。无论如何,我们正在为此使用 JSOBjBridge。

最佳答案

只需在您的 JavaScript 代码末尾添加类似 @"some_var = MAKE_JSON(); window.location =\"myapp://callback/\"+ escape(some_var)" 的内容,你转移到 evaluateJavaScriptByString:

在 UIWebView 的委托(delegate)中实现 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];
}

我没有测试这段代码,我只是从头开始编写它,但它应该可以工作,我已经这样做了。

关于ios - Objective-C 在 UIWebView 中调用 javascript 回调 Objective-C;线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9378550/

相关文章:

iphone - 如何在 iPhone 中缓存整个网页?

ios - 在 UINavigationController 堆栈 (IOS7) 的 UIWebview 中播放嵌入式视频的问题

iphone - UIWebView 滚动

ios - 如何在 Swift 的 UIWebView 中加载本地 PDF

javascript - 一般检查移动设备屏幕方向是否发生变化?

iphone - IOS UITableView contentOffSet 不再隐藏从推送的详细 View 返回时的标题

ios - 如何在进行搜索和过滤后使用 make a cell segue

objective-c - 添加 SubView 在 pushViewController 之前不显示

ios - 哪个是在 Swift 中显示不规则形状的更好选择?

iphone - HTML 未正确加载