2012-04-19 11 views
3

高さが固定されたUIWebViewのHTMLページのscrollWidthを計算するために、次を使用できます。UIWebViewを使用せずに固定高さのHTMLページのscrollWidthを計算する方法

[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollWidth"] 

この評価は、UIWebViewにリクエストをロードせずにローカルHTMLページで行うことはできますか?

これは別のスレッドで発生します。

+0

は、なぜあなたはローカルのHTMLページのscrollWidthを取得するために欠けていますか? –

+0

レンダリングせずにこれを正確に計算することはできません。 HTMLをレンダリングする必要があるので、UIWebViewまたは別の同様のフレームワークを使用する必要があります。 –

+0

好奇心を要して、なぜこのスレッドを別のスレッドで実行したいですか? – JoeCortopassi

答えて

3

いいえ(種類)。 htmlは、何らかの測定を得るためにある程度の容量でレンダリングする必要があります。 この理由は、html/css/javascriptが一緒に機能する方法に固有のものです。(javascriptはhtml/cssのプロパティを変更し、cssはhtmlを変更します)。 、工数の(何千、それはあなたのカスタムコードでのかどうか、ドンのページを自分をレンダリング

  1. :あなたはに持っていた場合のUIWebViewを使用せずに幅を取得し、次の2つのオプションのいずれかで立ち往生されるだろうこれを実行しないでください)、またはいくつかのオープンソースライブラリです。私はこれがUIWebViewより速くなるのではないかと疑いがあり、予期せぬバグが導入される可能性があります。
  2. バックグラウンドでページを測定し、その値をどこかのに保存します。これは基本的にはサイズのキャッシングの一種になります。出荷時にページが静的である場合は、手動で行い、ハードコードしてください。それらが動的である場合は、起動時にそれらを測定し、値を格納するクラスを作成します。 UIWebViewアプリでジャーキネスを引き起こし、あなたはメインスレッドだブロックしているので

    あなたがこれをやろうとしています:?動的測定はのUIWebView

EDITを必要としますかもしそうなら、あなたはこのような何かが

UIWebView *webview = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,320,460)]; 
webview.delegate = self; 
[webview loadRequest: [NSURLRequest requestWithURL:[NSURL urlFromString:@"/path/to/file.html"]]]; 

を?:しようと考えている...そして、後に...

- (void) webViewDidFinishLoad:(UIWebView *)webView 
{ 
    // run your code to get scroll width of page 
} 
+0

これは、現在の実装がどのように動作するかを正確に示しています。これは、ePubファイルから80のローカルHTMLファイルを解析するときに、UIとメインスレッドをブロックします。 –

+0

@OhDannyBoyシステムにアクセスせずに解析するファイルのせん断音量に悩まされるのではなく、UIWebViewがメインスレッドをブロックしていることを確認するためにInstrumentsに行ったことがありますか?また、ファイルにアクセスすると、そのスレッドもブロックされます。これらのファイルをNSDataなどにあらかじめロードしておき、それを使ってWebビューをロードすることを検討しましたか?これら80個のファイルは静的ですか?もしそうであれば、あなたの最善の策はまだ値をハードコードすることです – JoeCortopassi

関連する問題