UIWebView: можно ли отключить Javascript?

Вы можете отключить Javascript как в мобильном Safari, так и в Cocoa WebView, но я не вижу средств для этого в UIWebView.

Правильно ли я?

Я прошу в связи с этим вопросом получить титул страницы, отображаемой в UIWebView, используя Javascript. Я был обеспокоен тем, что он потерпит неудачу, если Javascript отключен, но похоже, что API не позволяет отключить Javascript.

Если Javascript не может быть деактивирован UIWebView, это делает мой предыдущий вопрос спорным.

Ответ 1

Нет публичного API для отключения Javascript. Поэтому вполне можно предположить, что он не будет отключен.

Ответ 2

Есть способ! Используя Политика безопасности контента, которая частично поддерживается в iOS 5.1 и выше и пользовательский заголовок:

X-WebKit-CSP: script-src none;

Вы можете сказать UIWebKit, чтобы он не позволял javascript на странице полностью. (или выборочно разрешать только script из определенного домена, больше информации в спецификации.

Чтобы сделать это с сервера, которым вы управляете, вам придется изменить заголовки ответов для страницы, чтобы включить заголовок 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];