Как я могу получить имя по ссылке?

#html #objective-c

#HTML #objective-c

Вопрос:

Я пишу на objective-C. У меня есть WebView и локальный файл index.html имеет

 <a href='http://www.google.com' name="666">
  

Как я могу получить name атрибут?

Спасибо!

Ответ №1:

Это зависит от того, когда / с помощью чего вам нужно получить имя. Если вам нужно имя, когда кто-то нажимает на ссылку, вы можете настроить некоторый JavaScript, который запускается при нажатии на ссылку (обработчик onclick). Если у вас есть только строка html, вы можете использовать регулярные выражения для синтаксического анализа документа и извлечения всех атрибутов name. Хорошей библиотекой регулярных выражений для Objective-C является RegexKit (или RegexKitLite на той же странице).

Регулярное выражение для разбора атрибута name из ссылки будет выглядеть примерно так:

 /<a[^>] ?name="?([^" >]*)"?>/i
  

РЕДАКТИРОВАТЬ: javascript для получения имени из ссылки, когда кто-то нажимает на нее, будет выглядеть примерно так:

 function getNameAttribute(element) {
    alert(element.name); //Or do something else with the name, `element.name` contains the value of the name attribute.
}
  

Это будет вызвано из onclick обработчика, что-то вроде:

 <a href="http://www.google.com/" name="anElementName" onclick="getNameAttribute(this)">My Link</a>
  

Если вам нужно вернуть имя в ваш код Objective-C, вы могли бы написать свою функцию onclick, чтобы добавить атрибут name к URL в виде хэштега, а затем перехватить запрос и проанализировать его в -webView:shouldStartLoadWithRequest:navigationType: методе вашего делегата UIWebView. Это выглядело бы примерно так:

 function getNameAttribute(element) {
    element.href  = '#' element.name;
}

//Then in your delegate's .m file

- (BOOL)webView:(UIWebView *)webView
        shouldStartLoadWithRequest:(NSURLRequest *)request
        navigationType:(UIWebViewNavigationType)navigationType {

    NSArray *urlParts = [[request URL] componentsSeparatedByString:@"#"];
    NSString *url = [urlParts objectAtIndex:0];
    NSString *name = [urlParts lastObject];
    if([url isEqualToString:@"http://www.google.com/"]){
        //Do something with `name`
    }

    return FALSE; //Or TRUE if you want to follow the link
}
  

Комментарии:

1. Мне нужно имя, когда кто-то нажимает на ссылку. Но я не знаю, как использовать JavaScript. Не могли бы вы написать какой-нибудь пример, пожалуйста? Спасибо!