2014-02-10 117 views
0

我無法在iOS/Safari中打開數據URL:s。在Safari中打開「data:xxx」URL

NSString* stringUrl = @"data:text/html;base64,PGh0bWw+DQo8Ym9keT4NCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPg0KZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuZ29vZ2xlLmNvbSc7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4="; 
NSURL* url = [NSURL URLWithString:stringUrl]; 
NSLog(@"Got url: %@", url); 
const BOOL STATUS = [UIApplication.sharedApplication openURL:url]; 
NSLog(@"STATUS: %d", STATUS); 

這是應該在iOS設備上打開Safari。結果頁將是:

<html> 
<body> 
<script language="JavaScript"> 
document.location='http://www.google.com'; 
</script> 
</body> 
</html> 

但是,openURL失敗,STATUS返回NO/0。我們如何解決這個問題?

+0

你確定stringUrl是正確的? – GenieWanted

+0

是的,它會生成一個NSURL而不是零。你可以試試'數據:text/html的; BASE64,PGh0bWw + DQo8Ym9keT4NCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPg0KZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuZ29vZ2xlLmNvbSc7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4 ='在任何瀏覽器,它會生成一個頁面,並搬遷到谷歌。 – Jonny

+0

我設法做到了,但以一種相當冗長的方式......我必須在應用程序本身中實現一個Web服務器,等等...... – Jonny

回答

0

可以使用UIApplication的特殊的方法,以確定它是否可以打開你的網址或不

BOOL狀態= [UIApplication.sharedApplication canOpenURL:URL]。

然而,在文件沒有提及如果UIApplication的能夠打開的URL與「數據」方案:

「的UIKit支持多種方案,包括HTTP,HTTPS,電話,FaceTime公司和郵寄地址的方案。」 - 來自UIApplication的文檔。

您可以嘗試在內部UIWebView的瀏覽器中打開該網址,看看它是如何去與一個UIWebView的這種方法:

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL; 
+0

我還沒有嘗試使用UIWebView的路徑,但我設法在其他方式。 UIApplication/openURL的主要問題是它不能直接打開很長的URL,在這種情況下,如果很長的URL只包含少量圖像甚至只包含一張圖像,那麼它們是很正常的。這個問題不適用於iOS的Safari。你可以嘗試在iPhone Safari中手動粘貼這些數據:xxx行,你會看到它的工作原理。 – Jonny