如何将大量文本从 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

如何将参数从 React-Native 发送到 Native

从 webview 发送消息到扩展

从原生android发送数据到webview javascript页面重新加载网页