0

我正在尝试为 iPhone 构建一个“类似 iBooks”的阅读器。我从我的网络服务接收大量文本(html),将其列列(在 webview 中,通过 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 还是目前有更简单的方法?

4

2 回答 2

1

You could ask to the webview the code you need by calling a JS function like that:

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

于 2012-08-06T11:19:53.233 回答
0

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

例如:

http://bridge.myapp.com/?segnum=2&segtotal=5
于 2012-08-05T21:50:48.417 回答