UIWebView:你能禁用Javascript吗?
您可以在MobileSafari和Cocoa的WebView中禁用Javascript,但在UIWebView:你能禁用Javascript吗?,javascript,iphone,uiwebview,Javascript,Iphone,Uiwebview,您可以在MobileSafari和Cocoa的WebView中禁用Javascript,但在UIWebView中我看不到这样做的方法 我说得对吗 关于这个问题,我使用Javascript提问。我曾担心如果禁用Javascript会失败,但API似乎不允许禁用Javascript 如果无法停用JavascriptUIWebView,那么我前面的问题就没有意义了 没有禁用Javascript的公共API。因此,假设它不会被禁用是相当安全的。有一种方法!使用iOS 5.1及更高版本部分支持的以及自定义
UIWebView
中我看不到这样做的方法
我说得对吗
关于这个问题,我使用Javascript提问。我曾担心如果禁用Javascript会失败,但API似乎不允许禁用Javascript
如果无法停用Javascript
UIWebView
,那么我前面的问题就没有意义了 没有禁用Javascript的公共API。因此,假设它不会被禁用是相当安全的。有一种方法!使用iOS 5.1及更高版本部分支持的以及自定义标头:
X-WebKit-CSP: script-src none;
您可以告诉UIWebKit完全不允许页面上使用javascript。(或者有选择地只允许来自特定域的脚本,在
要从您控制的服务器执行此操作,您必须修改页面的响应标头以包含X-WebKit-CSP标头…要从本地页面(设备上的纯文本或HTML数据)执行此操作,您必须定义并注册自定义NSURL协议以加载页面,并在特制的NSHTTPURLRResponse中发送标头:
NSDictionary *headers = [NSDictionary dictionaryWithObjectsAndKeys:
@"script-src none",@"X-WebKit-CSP",
@"text/html",@"Content-type",
encoding,@"Content-encoding",
nil];
NSHTTPURLResponse *urlResponse = [[NSHTTPURLResponse alloc] initWithURL:self.request.URL
statusCode:200
HTTPVersion:@"1.1"
headerFields:headers];
[self.client URLProtocol:self didReceiveResponse:urlResponse cacheStoragePolicy:NSURLCacheStorageAllowedInMemoryOnly];
遗憾的是,这个函数不适用于iFrame。@AlexanderSmirnov——如果您使用自定义的NSURLProtocol处理程序来处理iFrame——您将必须捕获所有出站调用(使用UIWebView中的委托回调来确保每当进行URL调用时,它都会将您的模式交换为http或https)@BadPirate你能给我提供更多的代码吗?我不明白在加载带有
loadHtmlString:baseURL:
的html字符串时如何防止XSS。感谢如果你使用新的WKWebView而不是UIWebView,有一种方法可以做到这一点。这在这里得到了回答。对于iOS 8及以上版本(根据删除的评论):“如果您使用新的WKWebView而不是UIWebView,有一种方法可以做到这一点。答案如下。”