2015-09-24 2 views
2

У меня есть очень простой/простой вопрос, но у меня абсолютно нет опыта работы с java. У меня есть WKWebView, и я хочу получить текст заголовка страницы, используя javascript document.getElementById.Получение заголовка из WKWebView с использованием оценкиJavaScript

Веб-страницы Я пытаюсь получить название от есть этот код:

<html> 
<body> 
<div class="toolbar"> 
<h1 id="pageTitle">Schedules</h1> 
</div> 
</body> 
<html> 

Этот код сокращениями, поэтому я прошу прощения за ошибки.

Тогда я пытаюсь получить доступ к PAGETITLE в Swift с:

func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) { 

    webView.evaluateJavaScript("document.getElementById('pageTitle').value") { (result, error) -> Void in 
     if error != nil { 
      print(result) 
     } 
    } 
} 

И результат возвращается ноль. После нескольких часов поиска я до сих пор не знаю, как заставить это работать. Любая помощь приветствуется.

ответ

13

Для получения заголовка страницы вам не нужно использовать javascript. WKWebView имеет title свойство, которое будет извлекать это для вас

https://developer.apple.com/library/ios/documentation/WebKit/Reference/WKWebView_Ref/#//apple_ref/occ/instp/WKWebView/title

title титульной странице. (Только для чтения)

СВИФТ var title: String? { get }

Класс WKWebView является ключом значение наблюдения (КВО) совместимый для этого свойства.

Доступно в iOS 8.0 и новее.

+1

О, я вижу. Это полезно знать, но на веб-странице есть и другие элементы, которые я также хотел бы получить. Я хотел получить общее представление о процессе, чтобы в будущем получить другие данные. – Tamarisk

+0

У вас есть последующий вопрос q, потому что этот ответ не отвечает на мой вопрос, который совпадает с вашим, но не для названия. – ingrid

0

Используйте Node.textContent, чтобы получить правильную копию содержимого текстовых узлов.

webView.evaluateJavaScript("document.getElementById('pageTitle').textContent") { (result, error) -> Void in 
    if error != nil { 
     print(result) 
    } 
} 
+0

К сожалению, это тоже не работает. – Tamarisk

0

Я использовал этот же фрагмент кода и разработал проблему ... Он напечатает результат только в том случае, если это «nil»!

Try:

webView.evaluateJavaScript("document.getElementById('pageTitle').textContent") { (result, error) -> Void in 
    if error == nil { 
     print(result) 
    } 
} 
+0

Как это помогает OP в устранении текущей проблемы? –

+0

Потому что есть хороший шанс, что код работает, но OP никогда не увидит результат! Единственным выходом будет "nil" –

0

В вашем коде, когда есть какая-то ошибка, то код выведет результат. Это ничего не будет печатать, когда нет ошибки.

Так что измените код на это, все работает хорошо.

func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) { 

    webView.evaluateJavaScript("document.getElementById('pageTitle').innerHTML") { (result, error) -> Void in 
     if error != nil { 
      print(error) 
     } 
     print(result) 
    } 
} 
0

этот код работает для меня:

webView.evaluateJavaScript("document.title').textContent") { (result, error) -> Void in 
    if error == nil { 
     print(result) 
    } 
}