0

iPhone用の「iBooksのような」リーダーを作ろうとしています。Webサービスから大量のテキスト(html)を受け取り、それを列化して(Webビュー内でjavascriptを介して)、「列」の配列をjavascriptから(Webビューから)ObjectiveCに順番に返そうとしています。 viewControllersを作成するには、UIPageViewControllerを使用する必要があります(列ごとに1つ、または基本的にページごとに1つ)。

私はshouldStartLoadWithRequestを使用して、Webビュー内のすべての場所の変更をインターセプトし、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

次のようなJS関数を呼び出すことで、必要なコードをWebビューに要求できます。

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 に答える