【问题标题】:How can I send a large amount of text from a webview to objc?如何将大量文本从 webview 发送到 objc?
【发布时间】:2012-08-05 11:27:17
【问题描述】:

我正在尝试为 iPhone 构建一个“类似 iBooks”的阅读器。我从我的网络服务接收大量文本(html),将其列列(在 web 视图中,通过 javascript),然后尝试将一组“列”从 javascript(来自 webview)发送回目标 c 顺序要创建 viewControllers,我需要使用 UIPageViewController(每列一个,或者基本上每页一个)。

我正在使用 shouldStartLoadWithRequest 来拦截 webview 中的每个位置更改,将 url 作为调用方法,并将“/”之后的第一个字符串作为该方法的参数:

- (BOOL)webView:(UIWebView*)webViewRef shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{

    //NSLog(@"REQUEST: %@", request);
    NSURL *URL = [request URL]; //Get the URL

    if ( [[URL scheme] isEqualToString:@"objc"] ) {

        NSMutableString *host = [[URL host] mutableCopy];

        [host appendString:@":"];

        SEL method =  NSSelectorFromString( host );

        NSArray *chunks = [URL pathComponents];

        NSString *stringToPass = [[chunks objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
        NSLog(stringToPass);

        if ([self respondsToSelector:method])
        {
            [self performSelector:method withObject:stringToPass afterDelay:0.1f];
        }

        return NO;
    }

    return YES;
}

我现在的主要问题是,文本可能太长,以至于 url 无法实际包含它(事实上,如果我 NSLog 它,它会被剪切)。有没有更好的方法来实现同样的目标?

我应该创建一个本地服务器或打开一个套接字将数据从 JS 发送到 objc 还是目前有更简单的方法?

【问题讨论】:

  • 如何从您的 Web 服务端进行分页之类的事情,每个请求仅接收前 5 页的文本,然后当用户翻转 3 页调用另外 5 页并逐块缓存它。
  • 不幸的是,我无法从 Web 服务分页(我无法控制它)。

标签: javascript objective-c ios webview


【解决方案1】:

你可以通过调用这样的 JS 函数来向 webview 询问你需要的代码:

NSString* htmlData = [_webView stringByEvaluatingJavaScriptFromString:@"jsFunction()"];

【讨论】:

    【解决方案2】:

    这有点工作,但您可以定义一个分块协议,用于在位置更改时将数据发送回。这样一来,每个“列”都可以分解成离散且易于消化的部分,并在 iOS 端进行组装。

    例如:

    http://bridge.myapp.com/?segnum=2&segtotal=5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 2012-10-04
      • 2013-04-08
      • 2020-05-31
      • 1970-01-01
      相关资源
      最近更新 更多