Задача добавления JavaScript «на лету» к уже загруженной в UIWebView HTML-странице появилась в свете несколько другой проблемы: необходимо было скрыть нужный нам элемент в UIWebView. Причем скрыть именно в программно заданный момент (по нажатию на кнопку, если быть более конкретным). В реализации задуманного нам помог пост, вольный перевод выжимки из которого представлен ниже.
———————————————————————————————————————————————
UIWebView имеет не так много методов экземпляра класса. Одним из них является stringByEvaluatingJavaScriptFromString — очень мощный и, к сожалению, плохо документированый.
Давайте рассмотрим этот загадочный метод в нескольких примерах.
Тривиальный пример того, как использовать stringByEvaluatingJavaScriptFromString, чтобы получить название HTML-документа:
1 |
NSString *title = [WebView stringByEvaluatingJavaScriptFromString: @ "document.title"]; |
Как правило, эту строчку имеет смысл вставлять в метод webViewDidFinishLoad.
Эта методика не ограничивается одной-вкладыши, или доступ простыми свойствами. Вот пример двух строк кода JavaScript в определенном порядке, как и следовало ожидать:
1 2 |
[WebView stringByEvaluatingJavaScriptFromString: @ "уаг field = document.getElementById('field_2');" "field.value='Multiple statements - OK';"]; |
Также таким образом можно вызывать JavaScript-функции. Если же нужно вызвать функцию JavaScript, которая еще не существует на веб-странице, то её можно добавить к ней самим следующим образом:
1 2 3 4 5 6 7 8 9 |
[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.
Полезная статья? Их будет больше, если вы поддержите меня!