【问题标题】:UIWebView: Can You Disable Javascript?UIWebView:你能禁用 Javascript 吗?
【发布时间】:2023-03-24 12:48:01
【问题描述】:

您可以在移动 Safari 和 Cocoa 的 WebView 中禁用 Javascript,但我在 UIWebView 中看不到这样做的方法。

我说的对吗?

我问这个问题regarding obtaining the title of page displayed in an UIWebView 使用Javascript。我曾担心如果禁用 Javascript 会失败,但似乎 API 不允许禁用 Javascript。

如果无法停用 Javascript UIWebView,那我之前的问题就没有意义了。

【问题讨论】:

  • 对于 iOS 8 及更高版本(根据已删除的评论):“如果您使用新的 WKWebView 而不是 UIWebView,则有一种方法可以做到这一点。此处已回答。stackoverflow.com/a/34404676/1239426

标签: javascript iphone uiwebview


【解决方案1】:

有办法!使用在 iOS 5.1 及更高版本中部分支持的 Content Security Policy 和自定义标头:

X-WebKit-CSP: script-src none;

您可以告诉 UIWebKit 完全不允许页面上的 javascript。 (或者选择性地只允许来自特定域的脚本,更多信息在spec

要从您控制的服务器执行此操作,您必须修改页面的响应标头以包含 X-WebKit-CSP 标头...从本地页面(纯文本或 HTML 数据)执行此操作在设备上),您必须定义和注册一个自定义 NSURLProtocol 来加载您的页面,并在您精心设计的 NSHTTPURLResponse 中发送标头:

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,有一种方法可以做到这一点。这是在这里回答的。 stackoverflow.com/a/34404676/1239426
【解决方案2】:

没有用于禁用 Javascript 的公共 API。所以假设它不会被禁用是相当安全的。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2018-08-22
    • 1970-01-01
    • 2022-12-06
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    相关资源
    最近更新 更多