Задача добавления JavaScript «на лету» к уже загруженной в UIWebView HTML-странице появилась в свете несколько другой проблемы: необходимо было скрыть нужный нам элемент в UIWebView. Причем скрыть именно в программно заданный момент (по нажатию на кнопку, если быть более конкретным). В реализации задуманного нам помог пост, вольный перевод выжимки из которого представлен ниже.
———————————————————————————————————————————————
UIWebView имеет не так много методов экземпляра класса. Одним из них является stringByEvaluatingJavaScriptFromString — очень мощный и, к сожалению, плохо документированый.
Давайте рассмотрим этот загадочный метод в нескольких примерах.
Тривиальный пример того, как использовать stringByEvaluatingJavaScriptFromString, чтобы получить название HTML-документа:
NSString *title = [WebView stringByEvaluatingJavaScriptFromString: @ "document.title"];
Как правило, эту строчку имеет смысл вставлять в метод webViewDidFinishLoad.
Эта методика не ограничивается одной-вкладыши, или доступ простыми свойствами. Вот пример двух строк кода JavaScript в определенном порядке, как и следовало ожидать:
[WebView stringByEvaluatingJavaScriptFromString: @ "уаг field = document.getElementById('field_2');"
"field.value='Multiple statements - OK';"];
Также таким образом можно вызывать JavaScript-функции. Если же нужно вызвать функцию JavaScript, которая еще не существует на веб-странице, то её можно добавить к ней самим следующим образом:
[webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"
"script.type = 'text/javascript';"
"script.text = \"function myFunction() { "
"var field = document.getElementById('field_3');"
"field.value='Calling function - OK';"
"}\";"
"document.getElementsByTagName('head')[0].appendChild(script);"];
[webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];
Пояснения:
Строка 1: Сначала мы создаем script элемент, используя JavaScript.
Строка 2: Устанавливаем тип элемента script на text/JavaScript.
Строка 3-6: Устанавливаем собственно содержание JavaScript-функции, которую мы хотим внедрить, в script-элемент
Строка 7: Добавляем новый элемент script как дочерний в head-элемент HTML DOM.
Строка 9: Вызов новой функции JavaScript.
Совет: Вы можете разбить NSString-константу на несколько строк в Xcode для повышения удобства чтения. Просто в конце строки и в начале следующей поставьте символ двойной кавычки. Во время компиляции эти линии будут объединены в одну строку.
Вы можете использовать этот общий метод, чтобы добавить JavaScript на любую веб-страницу, которую вы скачиваете для отображения в UIWebView.
Полезная статья? Их будет больше, если вы поддержите меня!