0

私はこのJavaScript機能を持っています:

function extract(html) {
     return html;
}

そして、iPhoneアプリから実行したいので、作成しUIWebViewて追加します:

        UIWebView *fullJavaScriptWebView = [[UIWebView alloc] init];
        fullJavaScriptWebView.delegate = self;

        NSURL *fileUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"] isDirectory:NO];

        [fullJavaScriptWebView loadRequest:[NSURLRequest requestWithURL:fileUrl]];

そして UIWebViewDelegate でwebViewDidFinishLoad:

NSString *html = [self.javaScriptDic objectForKey:@"html"];
NSString *jsCall = [NSString stringWithFormat:@"extract('%@');",html];
NSString *tmp = [webView stringByEvaluatingJavaScriptFromString:jsCall];

そして、私がそれを実行するたびに、tmp は null です。このコードの何が問題なのか分かりますか?

これhtmlは、以前にダウンロードしたウェブサイトの html で、次のような文字が含まれています。

4

2 に答える 2

1

htmlJavascript 関数に渡す場合、var には問題のある文字が含まれているようです。最初にエスケープしてみてください:

-(NSString *)scapeForJS:(NSString *)string {
    string = [string stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"];
    string = [string stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
    string = [string stringByReplacingOccurrencesOfString:@"\'" withString:@"\\\'"];
    string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];
    string = [string stringByReplacingOccurrencesOfString:@"\r" withString:@"\\r"];
    string = [string stringByReplacingOccurrencesOfString:@"\f" withString:@"\\f"];
    return string;
}
于 2013-07-03T09:45:59.553 に答える
0

HTML 文字列を webView にロードします。

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"Untitled" ofType:@"html" inDirectory:nil];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
    [self.webView loadHTMLString:htmlString baseURL:nil];

次に、内部 html を取得し、操作を行い、結果を返すことができます。

- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSString *result = [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat: @"function f(){ var markup = document.documentElement.innerHTML; return markup;} f();"]];
NSLog(@"result: '%@'", result);
}
于 2013-07-03T10:36:51.133 に答える