Ответ 1
Нет публичного API для отключения Javascript. Поэтому вполне можно предположить, что он не будет отключен.
Вы можете отключить Javascript как в мобильном Safari, так и в Cocoa WebView, но я не вижу средств для этого в UIWebView
.
Правильно ли я?
Я прошу в связи с этим вопросом получить титул страницы, отображаемой в UIWebView
, используя Javascript. Я был обеспокоен тем, что он потерпит неудачу, если Javascript отключен, но похоже, что API не позволяет отключить Javascript.
Если Javascript не может быть деактивирован UIWebView
, это делает мой предыдущий вопрос спорным.
Нет публичного API для отключения Javascript. Поэтому вполне можно предположить, что он не будет отключен.
Есть способ! Используя Политика безопасности контента, которая частично поддерживается в 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];