4

UIWebViewを使用してデータを表示し、スピナーを使用して読み込みプロセスを表示します。データは私のサーバーからの.mp3ファイルです。

webViewのロードを開始すると、スピナーが起動します。その後、オーディオファイルの再生が開始されるまで遅延があります。その瞬間、スピナーを完全に停止する必要があります。

大したことではありませんが、念のため-ロードコード:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://blablabla.mp3"]]];

質問:webViewがオーディオを再生する準備ができているとき(再生を開始するのに十分なデータがあるとき)にイベントをキャッチするにはどうすればよいですか?スピナーを止めるために必要です。

WebViewDidFinishLoadは、私が使用できる唯一のデリゲートメソッドであり、すべてのデータがロードされたときに通知するため、私には適していません。使っても、オーディオファイルの読み込みが終わっても呼び出されません(まだ終わっていないのかもしれませんが、mp3の再生中に読み込みの進行が終わりになっているのがわかります)。念のため-エラー:

Error Domain=NSURLErrorDomain Code=-999 
"The operation couldn’t be completed. (NSURLErrorDomain error -999.)"
UserInfo=0x1d39d0 {NSErrorFailingURLKey=http://blablabla.mp3,
NSErrorFailingURLStringKey=http://blablabla.mp3}

ヘルプ/ツタンカーメン/リンクをいただければ幸いです。前もって感謝します!

4

5 に答える 5

2

この種の制御については、webViewを介して行うことはお勧めしません。そのレベルの対話を取得することはできません。

于 2012-09-03T14:47:10.973 に答える
0

別のクラスを使用して、.mp3ファイルの取得と保存のためのNSUrlConnectionを管理します。NSNotificationCenterとpostNotificationメッセージ、またはファイルを再生する準備ができたときのデリゲートを使用できます。

于 2012-09-12T12:48:26.153 に答える
0

非常に人気のあるASIHTTPRequestクラスを試してみてください。

[didReceiveData:]デリゲートがあり、テストに適している可能性があります。

于 2012-09-10T09:23:16.103 に答える
0

簡単ですのでご安心ください!

WebViewの-999は通常のエラーであり、ページを実際に完全にロードせずに別のコンテンツをロードするときに適用されます。

だから、その時の必要があります:

if([error code] != NSURLErrorCancelled) return;

javascriptイベント検出へ:

JSからObjective-Cメソッドを実行する

残念ながら、これは少し複雑です。MacOSXに存在する同じwindowScriptObjectプロパティ(およびクラス)がないため、2つの間の完全な通信が可能になります。

ただし、次のようなjavascriptのカスタムメイドのURLから簡単に呼び出すことができます。

window.location = yourscheme://callfunction/parameter1/parameter2?parameter3=value

jqueryライブラリをロードし、document.readyイベントを使用します。

 $(document).ready(function() {
   window.location = yourscheme://callfunction/parameter1/parameter2?parameter3=value
 });

そして、これでObjective-Cからそれを傍受します:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
   NSURL *URL = [request URL]; 
   if ([[URL scheme] isEqualToString:@"yourscheme"]) {
       // parse the rest of the URL object and execute functions
   } 
}

これは(またはwindowScriptObjectを使用して)本来あるべきほどクリーンではありませんが、機能します。

最後の解決策:

Javascriptブリッジ https://github.com/marcuswestin/WebViewJavascriptBridge

楽しみ

于 2012-09-12T12:25:44.223 に答える
0

iOSアクティビティインジケーターを使用する代わりに、html内にアクティビティインジケーターを実装します。それははるかに単純な終わりでもエレガントなソリューションです。javascriptを使用してアニメーションGIF画像でhtml要素を表示/非表示にするだけです。

于 2012-09-12T12:44:06.700 に答える