2012-09-03 44 views
4

我使用UIWebView來呈現數據,並使用微調器來顯示加載過程。數據是來自我的服務器的.mp3文件。管理UIWebView加載過程

我開始加載webView時啓動微調。然後會有一段延遲,直到音頻文件開始播放。我需要在那一刻停止旋轉。

Notta大不了的,但以防萬一 - 加載代碼:

[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} 

任何幫助/嘖嘖/鏈接表示讚賞。提前致謝!

回答

2

對於這種類型的控制,我不會建議通過webView來完成它 - 你不能獲得那種級別的交互。

0

你可以嘗試da很受歡迎ASIHTTPRequest類。

有一個[didReceiveData:]委託,可能適合您的測試。

0

不用擔心這很容易!

WebView的-999是一個正常的錯誤,適用於當您加載另一個內容而不讓頁面完全加載時。

所以一定的時間做到這一點:

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

給JavaScript事件檢測:

從JS

執行Objective-C的方法,這是不幸的是稍微複雜一點,因爲在Mac OSX上不存在相同的windowScriptObject屬性(和類),允許兩者之間完全通信。

但是,您可以輕鬆地從JavaScript的特製的URL調用,如:

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

負荷jQuery庫和使用的document.ready事件:

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

而且從客觀攔截它-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 
    } 
} 

這不是很乾淨,因爲它應該是(或通過使用windowScriptOb ject),但它的工作原理。

最後的解決方案:

一個JavaScript橋 https://github.com/marcuswestin/WebViewJavascriptBridge

享受

0

而不是使用iOS的活動指標,實現HTML中的活動的指標。這是更簡單的結束也優雅的解決方案。只需使用javascript顯示/隱藏帶有動畫gif圖像的html元素。

0

使用單獨的類來管理NSUrlConnection以檢索和存儲.mp3文件。您可以使用NSNotificationCenter和postNotification消息或代表文件準備好播放時