Определить нажатие кнопки отправки UIWebview

У меня есть страница UIWebView с несколькими кнопками. Необходимо определить, какая кнопка нажата из UIWebView.

Источник страницы для загружаемого содержимого UIWebview:

        <form action="settings_personal.php" data-ajax="false" method="post">   
            <input type="submit" name ="btn_settings_personal" value=" Goals (Personal data) " data-icon="star" data-theme="g" />
        </form> 

        <form action="settings_global.php" data-ajax="false" method="post"> 
            <input type="submit" name ="btn_settings_global" value=" Settings " data-icon="gear" data-theme="g" />
        </form>
        <form action="" data-ajax="false" method="post">    
            <input type="submit" name ="btn_web_access" value=" Web Plattform Access " data-icon="plus" data-theme="h" />
        </form>     

Мне нужно идентифицировать кнопку, нажатую для названной кнопки «btn_web_access» ???

Я реализовал следующее:

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

 NSString* clicked = [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('btn_web_access').click();"];

    NSLog(@"CLICK %@",clicked);

}

но это бесполезно .. Заранее спасибо.


person Injar    schedule 10.08.2012    source источник
comment
Ваш вызов stringByEvaluatingJavaScriptFromString просто вызовет новое событие нажатия кнопки. Это не кажется полезным, поскольку вы спрашиваете, как определить, какая кнопка была нажата, а не как нажать кнопку программно. Смотрите мой ответ о том, поможет ли это вам.   -  person alex    schedule 10.08.2012


Ответы (2)


Просто используйте атрибут URL-адреса запроса, чтобы отличить цель запроса загрузки:

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

    NSLog(@"url: %@", [[request URL] absoluteString]);

    return YES;

}

На основании вызываемого URL-адреса вы знаете, какая кнопка (или даже любая ссылка) вашей текущей веб-страницы была нажата. Затем выполните необходимое действие и не забудьте вернуть значение типа BOOL, указывающее, действительно ли загружать запрошенный URL.

В Swift у вас может быть

func webView(webView:UIWebView,
          shouldStartLoadWithRequest request:NSURLRequest,
          navigationType:UIWebViewNavigationType) -> Bool
    {
    if (navigationType == .FormSubmitted)
        {
        print("was the 'submit' form")
        }

    let u = request.mainDocumentURL
    print("local or remote url was " ,u)

    return true // allow the form to in fact send the form
    }
person alex    schedule 10.08.2012
comment
Но веб-страница Alex не содержит никаких действий, пожалуйста, проверьте ниже ‹form action = data-ajax = false method = post› ‹input type = submit name = btn_web_access value = Web Plattform Access data-icon = plus data-theme = h / > - person Injar; 10.08.2012
comment
Просто установите любую произвольную ссылку, которая поможет вам идентифицировать вашу кнопку, внутри параметра действия. Когда пользователь нажимает эту кнопку, просто верните НЕТ в shouldStartLoadWithRequest. Таким образом, этот щелчок не приведет к фактической загрузке страницы внутри веб-просмотра. - person alex; 10.08.2012
comment
Алекс предлагает вам любой другой вариант, например, определить имя нажатой кнопки UIWebview. - person Injar; 10.08.2012
comment
Другой подход был бы аналогичным: 1) Внутри HTML, не отправляйте форму непосредственно при нажатии кнопки. Вместо этого вызовите функцию javascript, которая сохраняет идентификатор кнопки внутри глобальной переменной и затем отправляет форму, если это необходимо. 2) Получить текущее значение идентификатора кнопки javascript внутри метода shouldStartLoadWithRequest с помощью stringByEvaluatingJavaScriptFromString. Но вам по-прежнему нужен набор параметров действия для каждой формы. - person alex; 10.08.2012
comment
Алекс, у меня есть еще одна возможность получить значение кнопки UIWebview, то есть имя, которое будет легче идентифицировать ... ПО нижеприведенному коду - (BOOL) webView: (UIWebView *) webView shouldStartLoadWithRequest: (NSURLRequest *) request navigationType: (UIWebViewNavigationType ) navigationType {NSString * value1 = [self.webView stringByEvaluatingJavaScriptFromString: @ document.getElementsByName ('btn_web_access') [0] .value]; NSLog (@Uersname:% @, значение1); } - person Injar; 10.08.2012

Сделайте это с помощью HTML-кода

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:
    (NSURLRequest *)request navigationType: 
    (UIWebViewNavigationType)navigationType {
        if ([request.URL.scheme isEqualToString:@"inapp"]) {
            if ([request.URL.host isEqualToString:@"capture"]) {
            // do capture action
        }  
        return NO;
     }  

   return YES;
}
person Vikas Rajput    schedule 09.02.2017