如何将大量文本从 webview 发送到 objc?
Posted
技术标签:
【中文标题】如何将大量文本从 webview 发送到 objc?【英文标题】:How can I send a large amount of text from a webview to 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 服务分页(我无法控制它)。 【参考方案1】:你可以通过调用这样的 JS 函数来向 webview 询问你需要的代码:
NSString* htmlData = [_webView stringByEvaluatingJavaScriptFromString:@"jsFunction()"];
【讨论】:
【参考方案2】:这有点工作,但您可以定义一个分块协议,用于在位置更改时将数据发送回。这样一来,每个“列”都可以分解成离散且易于消化的部分,并在 ios 端进行组装。
例如:
http://bridge.myapp.com/?segnum=2&segtotal=5
【讨论】:
以上是关于如何将大量文本从 webview 发送到 objc?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 WebView Cordova AngularJS 控制器访问/发送数据到 MainActivity?
如何使用从 TextView 中的 firebaseDB 检索到的标签解析 HTML 文本?没有 WebView [重复]
使用 Webview 将对象从 Javascript 发送到 Kotlin