Мне нужно извлечь содержимое тега title из HTML-страницы, отображаемой в UIWebView. Какое самое надежное средство для этого?
Я знаю, что могу сделать:
- (void)webViewDidFinishLoad:(UIWebView *)webView{
NSString *theTitle=[webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}
Однако это работает, только если включен JavaScript.
В качестве альтернативы, я мог бы просто отсканировать текст HTML-кода для заголовка, но это кажется немного громоздким и может оказаться хрупким, если авторы страницы сошли с ума от своего кода. Если это касается того, какой метод лучше всего использовать для обработки HTML-текста в iPhone API?
Я чувствую, что я забыл что-то очевидное. Есть ли лучший метод, чем эти два варианта?
Обновить:
Исходя из ответа на этот вопрос: UIWebView: Можете ли вы отключить Javascript? кажется, нет способа отключить Javascript в UIWebView. Поэтому метод Javascript выше всегда будет работать.
источник
Ответы:
Для тех, кто просто прокручивает вниз, чтобы найти ответ:
Это всегда будет работать, так как в UIWebView нет возможности отключить Javascript.
источник
WKWebView
имеет свойство title, просто сделайте это так,Я не думаю, что
UIWebView
сейчас подходит.источник
Если Javascript включен, используйте это: -
Если Javascript отключен Используйте это: -
Я использовал +7 и -7 в NSMakeRange, чтобы исключить длину,
<title>
т.е. 7источник
Изменить: только что увидел, что вы узнали ответ ... sheeeiiitttt
Я буквально только что узнал это! Для этого вам даже не нужно отображать его в UIWebView. (Но так как вы используете его, вы можете просто получить URL текущей страницы)
В любом случае, вот код и некоторые (слабые) объяснения:
Итак, у нас есть HTML-код, теперь, как мы можем получить заголовок? Ну, в каждом html-документе заголовок обозначается This Is the Title Так что, вероятно, проще всего сделать поиск в этой строке htmlCode для и для и подстроковать ее, чтобы мы получили промежуточный материал.
И это действительно так! Таким образом, в основном, чтобы объяснить все махинации, происходящие в docTitle, если мы сделали диапазон, просто сказав NSMakeRange (startRange.location, endRange.location), мы бы получили заголовок И текст startString (который есть), потому что расположение первый символ строки. Таким образом, чтобы компенсировать это, мы просто добавили длину строки
Теперь имейте в виду, что этот код не тестируется ... если есть какие-либо проблемы, это может быть орфографическая ошибка, или что я не / не добавил указатель, когда я не должен был.
Если заголовок немного странный и не совсем правильный, попробуйте поиграться с NSMakeRange - я имею в виду добавление / вычитание различных длин / положений строк - всего, что кажется логичным.
Если у вас есть какие-либо вопросы или есть проблемы, не стесняйтесь спрашивать. Это мой первый ответ на этом сайте, так что извините, если он немного дезорганизован
источник
Вот версия Swift 4, основанная на ответе здесь
источник
До сих пор у меня нет опыта работы с веб-представлениями, но я считаю, что он устанавливает заголовок заголовка страницы, поэтому советую использовать уловку в веб-просмотре и перезаписать установщик для self.title, чтобы добавить сообщение в один из вас возражает или изменяет какое-то свойство, чтобы получить заголовок.
Не могли бы вы сказать мне, работает ли это?
источник
Если вам часто нужно это в вашем коде, я предлагаю вам добавить функцию в «расширение UIWebView», как это
В качестве альтернативы лучше использовать WKWebView.
К сожалению, это не очень хорошо поддерживается в ARKit. Мне пришлось отказаться от WKWebView. Я не мог загрузить сайт в webView. Если у кого-то есть решение этой проблемы здесь -> у меня проблема симлара, это очень поможет.
источник