Подтвердить что ты не робот

Вызывать метод в объектном c-коде из HTML-кода с помощью UIWebView

У меня есть .html файл в моем приложении iOS. В файле HTML есть несколько блоков div с методами onClick. Когда я нажимаю на эти блоки, я вызываю код javascript в веб-представлении, но мне также нужно знать об этих событиях в моем исходном коде.

Например, когда я нажимаю на веб-элемент и вызывается onClick, мне нужно вызвать какой-либо метод в коде, например. - (void)didTouchedWebElementWithId

Могу ли я сделать это. Спасибо.

4b9b3361

Ответ 1

Чтобы вызвать метод Objective-C в JS:

приведенный ниже URL-адрес помогает в этом

Как вызвать метод Objective C из Javascript и отправить данные в Javascript в iOS?

Нет способа выполнения, мы обходим навигацию на другую страницу и во время навигации, делегат webview будет следить за префиксом навигации и выполнять указанный нами метод.

sample.html

<html>
    <head>
        <script type='text/javascript'>
            function getText()
            {
                return document.getElementById('txtinput').value;
            }
            function locationChange()
            {
                window.location = 'ios:webToNativeCall';
            }
        </script>
    </head>
    <body style='overflow-x:hidden;overflow-y:hidden;'>
        <h2 style = "font-size:16px;" align='center'>Hi Welcome to Webpage</h2>
        <br/>
        <p align='center' style = "font-size:12px;">Please Click the button after entering the text</p>
        <br/>
        <center>
            <input type='text' style='width:90px;height:30px;' id='txtinput'/>
        </center>
        <br/>
        <center>
            <input type='button' style='width:90px;height:30px;' onclick='locationChange()' value='click me'>
        </center>
    </body>
</html>

Objective-C код

когда вы нажимаете кнопку на странице html, делегат ниже будет уволен и навигация отменена, потому что мы возвращаем NO и соответствующий метод называется

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if ([[[request URL] absoluteString] hasPrefix:@"ios:"]) {

        // Call the given selector
        [self performSelector:@selector(webToNativeCall)];        
        // Cancel the location change
        return NO;
    }
    return YES;
}

- (void)webToNativeCall
{
    NSString *returnvalue =  [self.webviewForHtml stringByEvaluatingJavaScriptFromString:@"getText()"];

    self.valueFromBrowser.text = [NSString stringWithFormat:@"From browser : %@", returnvalue ];
}