iOS SDK. Как внедрить JavaScript-функцию в UIWebView

{lang: 'ru'}

Задача добавления JavaScript «на лету» к уже загруженной в UIWebView HTML-странице появилась в свете несколько другой проблемы: необходимо было скрыть нужный нам элемент в UIWebView. Причем скрыть именно в программно заданный момент (по нажатию на кнопку, если быть более конкретным). В реализации задуманного нам помог пост, вольный перевод выжимки из которого представлен ниже.

———————————————————————————————————————————————

UIWebView имеет не так много методов экземпляра класса. Одним из них является stringByEvaluatingJavaScriptFromString — очень мощный и, к сожалению, плохо документированый.

Давайте рассмотрим этот загадочный метод в нескольких примерах.

Тривиальный пример того, как использовать stringByEvaluatingJavaScriptFromString, чтобы получить название HTML-документа:

Как правило, эту строчку имеет смысл вставлять в метод webViewDidFinishLoad.

Эта методика не ограничивается одной-вкладыши, или доступ простыми свойствами. Вот пример двух строк кода JavaScript в определенном порядке, как и следовало ожидать:

Также таким образом можно вызывать JavaScript-функции. Если же нужно вызвать функцию JavaScript, которая еще не существует на веб-странице, то её можно добавить к ней самим следующим образом:

Пояснения:


Строка 1: Сначала мы создаем script элемент, используя JavaScript.
Строка 2: Устанавливаем тип элемента script на text/JavaScript.
Строка 3-6: Устанавливаем собственно содержание JavaScript-функции, которую мы хотим внедрить, в script-элемент
Строка 7: Добавляем новый элемент script как дочерний в head-элемент HTML DOM.
Строка 9: Вызов новой функции JavaScript.

Совет: Вы можете разбить NSString-константу на несколько строк в Xcode для повышения удобства чтения. Просто в конце строки и в начале следующей поставьте символ двойной кавычки. Во время компиляции эти линии будут объединены в одну строку.

Вы можете использовать этот общий метод, чтобы добавить JavaScript на любую веб-страницу, которую вы скачиваете для отображения в UIWebView.


Полезная статья? Их будет больше, если вы поддержите меня!