检测是否在iOS7下启用了常规网站限制

时间:2013-11-08 13:46:59

标签: uiwebview ios7 restrictions

我在iOS 7应用中使用UIWebViews来显示内容。不幸的是,用户已经为iOS 7引入的网站启用了系统范围的限制。虽然我的webview内容中没有“成人”类别,但过滤器似乎不喜欢我想在某些情况下显示的内容。

因此,我搜索了一种方法来检测用户是否启用了系统范围的网站限制(或设备上安装的设置配置文件)。我想至少告诉用户为什么视图的某些元素行为不符合预期,并给出建议,允许'localhost'完全使用我的应用程序并仍然启用限制。

可悲的是,我找不到一种方法来检测是否启用了这些限制。我当然可以观察每个UIWebView的内容,并在内容被阻止的情况下做出反应...这似乎只是对每个webview一直有点开销,我想限制那些真正拥有的用户启用限制。

此页面介绍了如何设置网站限制以及它们对用户的显示方式,还有一个图像如何显示Safari中的网站。我在我的应用程序webview中得到了同样的结果: http://www.ifans.com/forums/threads/inside-ios-7-how-to-block-websites.399846/

所以任何暗示如何检测启用的网站限制都会很好。谢谢!

1 个答案:

答案 0 :(得分:2)

尝试加载受限制的网页时,UIWebView会将其内容替换为占位符页面。如果您查看该页面的来源,则会显示以下代码段:

<!-- NO LOC: Applications (such as Dictionary.app) can recognize that a webpage has been restricted by looking for the following comment:
-->
<!-- com.apple.webcontentfilter.accessrestricted -->

所以你可以这样做:

NSString *htmlSourceCode = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
BOOL accessIsRestricted = ([htmlSourceCode rangeOfString:@"<!-- com.apple.webcontentfilter.accessrestricted -->"].location != NSNotFound);

此外,iOS 7.0.3中的UIWebView似乎并不限制loadHTMLString:baseURL:加载的内容,因此您可能可以使用它来解决这些限制。

最后,我不确定你为什么要使用localhost。如果您要加载本地文件,只需请求指向文件的NSURL(使用NSURL的{​​{3}})。