Ios 在Safari中打开“data:xxx”URL

Ios 在Safari中打开“data:xxx”URL,ios,mobile-safari,Ios,Mobile Safari,我无法在iOS/Safari中打开数据URL:s NSString* stringUrl = @"data:text/html;base64,PGh0bWw+DQo8Ym9keT4NCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPg0KZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuZ29vZ2xlLmNvbSc7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4="; NSURL* url = [NS

我无法在iOS/Safari中打开数据URL:s

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失败,状态返回NO/0。我们如何解决这个问题?

您可以使用UIApplication的特殊方法来确定它是否可以打开您的URL

BOOL STATUS=[UIApplication.sharedApplication canOpenURL:url]

但是,文档中没有提到UIApplication是否能够使用数据方案打开URL:

UIKit支持许多方案,包括http、https、tel、facetime和mailto方案。-来自UIC应用程序的文档

您可以尝试在内部UIWebView浏览器中打开此URL,并查看它与此UIWebView方法的配合情况:

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

您确定stringUrl是正确的吗?是的,它生成NSURL而不是nil。您可以尝试数据:text/html;base64,PGh0bWw+dqo8ym9ket4ncjxzy3jpchqgbgfuz3vhz2u9ikphdmfty3jpchqipg0kzg9jww1lbnqbg9jyxrpb249j2h0dha6ly93d3cuz29vz2xllmnvbsc7dqo8l3njcmlwdd4ncjvym9ket4ncjwwvahrtbd4=在任何浏览器中,它都会生成该页面并重新定位到谷歌。我设法做到了,但用了相当冗长的方式。。。我必须在应用程序本身中实现一个web服务器,等等……我没有尝试使用UIWebView的路径,但我设法用另一种方式实现了它。UIApplication/openURL的主要问题是它不能直接打开很长的url,在这种情况下,如果很长的url只包含几个图像,甚至只有一个图像,那么很正常。问题不在于iOS中的Safari。您可以尝试在iPhone Safari中手动粘贴该数据:xxx行,您将看到它可以正常工作。