web-dev-qa-db-fra.com

Appelez la méthode dans le code Objective C à partir du code HTML à l'aide d'UIWebView

J'ai un fichier .html dans mon application iOS. Le fichier HTML contient quelques blocs div avec des méthodes onClick. Lorsque je tape sur ces blocs, j'invoque du code javascript dans la vue Web, mais j'ai également besoin de connaître ces événements dans mon code source.

Par exemple, lorsque je tape sur un élément Web et que l'onClick est appelé, je dois invoquer une méthode dans le code, par exemple - (void)didTouchedWebElementWithId

Puis-je faire ce genre de choses. Merci.

21
Matrosov Alexander

Pour appeler la méthode d'Objective-C dans JS:

l'url ci-dessous aide à le faire

Comment invoquer la méthode Objective C à partir de Javascript et renvoyer des données à Javascript dans iOS?

Il n'y a aucun moyen d'exécuter, nous faisons une solution de contournement par une navigation vers une autre page et pendant la navigation, un délégué webview surveillera le préfixe de la navigation et exécutera la méthode que nous avons spécifiée.

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>

Code Objective-C

lorsque vous cliquez sur le bouton dans la page html, le délégué ci-dessous est renvoyé et la navigation est annulée car nous renvoyons NO et la méthode correspondante est appelée

- (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 ];
}
48
Vinodh