0

Webページからいくつかのデータがあるとしましょう:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:myurl]];
[request setHTTPMethod:@"GET"];
NSData* returnedData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
NSString* html = [[NSString alloc] initWithData:returnedData encoding:NSUTF8StringEncoding];

データに対していくつかのクエリを実行し、DOM を変更するローカルの JavaScript スクリプトもあります。現時点では、これを実現するために、上記で受け取った HTML を取得し、webview を作成してこれをロードしています。

[NSString stringWithFormat:@"<script>%@</script>%@", myscript, html];

次に、webviewのdidFinishLoadForFrameイベントで、呼び出しています

NSString* modifiedhtml = [sender stringByEvaluatingJavaScriptFromString: @"document.body.innerHTML"]]

これにより、変更されたhtmlが残り、好きなように実行できます。ただし、特に webview の作成はメイン スレッドでのみ許可されており、このプロセス全体がバックグラウンド スレッドで実行されることが理想的であるため、これはまったくエレガントに見えません。と呼ばれるので、この発生のタイムアウトの処理専用の行が増えています。全体として、それは大きな醜い混乱です。

理想的な世界では、webview をまったく作成せずに、最初のパスでこの JavaScript を適用します。私は次のようなあらゆる種類のことを試してきました:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:myurl]];
[request setHTTPMethod:@"GET"];
NSData* returnedData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
NSString* html = [[NSString alloc] initWithData:returnedData encoding:NSUTF8StringEncoding];
NSString* modifiedhtml = [request stringByEvaluatingJavaScriptFromString: myscript]];

スクリプトはページを返すように設定されていますが、役に立ちません。

これを現在よりもエレガントかつ効率的に処理する方法について何か提案はありますか?

4

1 に答える 1

-1

Web ビューの使用を避け、html にタグがあると想定するには、次のheadようにします。

NSArray *tempArray = [html componentsSeparatedByString:@"<head>"];
NSString *modifiedHtml = [NSString stringWithFormat:@"%@<head>%@%@", [tempArray objectAtIndex:0], yourScriptString, [tempArray objectAtIndex:1]];

headスクリプトが既存のタグに挿入されます。通常のサニティ チェックを使用してコードを完成させる必要があります。

于 2012-11-23T16:18:36.860 に答える