Estoy cargar una dirección url en el webview que tiene debajo de HTML y javascript llamada a la función. Ahora estoy buscando en cuando el usuario toca el botón de enviar en webview se debe llamar a cualquier método en el viewController. Webview debe cargar la url(webview delegado) es un enfoque pero, ¿hay alguna nueva forma de conocer cuando la función javascript que se llama por webview debe informar viewcontroller o desencadenar cualquier método en el controlador de vista.

No estoy buscando esta solución, necesitamos

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

    NSLog(@"passed data from web view : %@",[[request URL] query]);

    if([[[request URL] query] isEqualToString:@"clickedOnLineNo"])
    {
//Do your action here

    }

Tenemos que navegar a una URL falsa de su método de javascript como,

window.location = "someLink://yourApp/form_Submitted:param1:param2:param3";  

sobre un botón o haga clic en su acción requerida.

Pero, ¿hay alguna nueva posibilidad de JavaScriptCore para lograr el mismo.

aquí está la página HTML de ejemplo que estoy cargando <!DOCTYPE html> <html> <head> <script type=»text/javascript»> <!– documento.escribir(«<h1></h1>»); la función submitButton( ) { //Esta función debe ser llamada en el Objetivo de la clase C cuando el usuario toca el botón en webview } //–> </script> </head> <body> <h1>Mi Aplicación Móvil</h1> <p>Por favor, introduzca los Detalles</p> <form name=»comentarios» method=»post» action=»mailto:[email protected]»> <!– Elementos de formulario irá aquí –> </form> <form name=»inputform»> <input type=»button» onClick=»submitButton()» value=»enviar»> </form> </body> </html>
usted puede crear una aplicación phonegap, que la aplicación puede llamar en el lugar de webview. llevará a cabo la misma excatly desea
Gracias Rahul pero no hay posibilidad de JavaScriptCore marco de trabajo que Apple ha introducido recientemente en iOS 7.
posibles duplicados de Llamar a un Objetivo-C de la función de JavaScript alojado en alguna página web
Gracias Oscuro, pero que tenga ese mismo enfoque de llamar a una url falsa en la vista web

OriginalEl autor user3283486 | 2014-02-07

1 Comentario

  1. 21

    El Objetivo-C interfaz en la JavascriptCore marco introducido con iOS 7 permite llamar a Objective-C métodos de Javascript. Para una introducción a estas características, echa un vistazo a la WWDC 2013 introducción «la Integración de JavaScript en Aplicaciones Nativas» sesión de Apple developer network: https://developer.apple.com/videos/wwdc/2013/?id=615

    Tiene una breve sección hacia el final en WebView (MacOs sólo no iOS)

    El código de ejemplo siguiente muestra cómo implementar lo que usted desea para iOS.

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0,40,320,320)];
        webView.delegate = self;
        [self.view addSubview:webView];
         NSString *pageSource = @"<!DOCTYPE html> <html> <head> </head> <body> <h1>My Mobile App</h1> <p>Please enter the Details</p> <form name=\"feedback\" method=\"post\" action=\"mailto:[email protected]\"> <!-- Form elements will go in here --> </form> <form name=\"inputform\"> <input type=\"button\" onClick=\"submitButton('My Test Parameter')\" value=\"submit\"> </form> </body> </html>";
        [webView loadHTMLString:pageSource baseURL:nil];
    }
    
    - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
        JSContext *context =  [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; //Undocumented access
        context[@"submitButton"] = ^(NSString *param1) {
            [self yourObjectiveCMethod:param1];
        };
    }
    
    - (void)yourObjectiveCMethod:(NSString *)param1 {
        NSLog(@"User clicked submit. param1=%@", param1);
    }

    Cosas a tener en cuenta:

    • Acceso a la JSContext de un UIWebView es indocumentados. Dos técnicas son conocidas (ver Acceso a la JavaScriptCore motor de un UIWebView). La primera técnica se utiliza aquí.
    • No es necesario definir la función de javascript «submitButton» dentro de la página, va a definir la función de Objective-C con webView del JSContext
    • Una carga de la página en un webview causas de su JSContext a reemplazados, por lo tanto, usted debe implementar un delegado para la UIWebView y definir su Objetivo-C de devolución de llamada en la implementación de la selector para -webViewDidFinishLoad:
    • He asumido que usted desea para pasar parámetros a esta devolución de llamada, por lo que he mostrado un ejemplo de parámetro. Aunque esto no está cubierto en el video tutorial se mencionó anteriormente (o el PDF equivalente), mirando JSValue.h muestra que JavascriptCore ofrece conversión integrada entre las siguientes Objective-C y Javascript tipos:

    .

      Objective-C type  |   JavaScript type
    --------------------+---------------------
            nil         |     undefined
           NSNull       |        null
          NSString      |       string
          NSNumber      |   number, boolean
        NSDictionary    |   Object object
          NSArray       |    Array object
           NSDate       |     Date object
          NSBlock *     |   Function object *
             id **      |   Wrapper object **
           Class ***    | Constructor object ***
    
    * Instances of NSBlock with supported arguments types will be presented to
    JavaScript as a callable Function object. For more information on supported
    argument types see JSExport.h. If a JavaScript Function originating from an
    Objective-C block is converted back to an Objective-C object the block will
    be returned. All other JavaScript functions will be converted in the same
    manner as a JavaScript object of type Object.
    
    ** For Objective-C instances that do not derive from the set of types listed
    above, a wrapper object to provide a retaining handle to the Objective-C
    instance from JavaScript. For more information on these wrapper objects, see
    JSExport.h. When a JavaScript wrapper object is converted back to Objective-C
    the Objective-C instance being retained by the wrapper is returned.
    
    *** For Objective-C Class objects a constructor object containing exported
    class methods will be returned. See JSExport.h for more information on
    constructor objects.
    JS contexto de obras similares, de alguna manera, como [webView stringByEvaluatingJavaScriptFromstring:@»documento.getElementById(‘apellido’).valor;»]; pero ofrece más que eso. Gracias Mike por la explicación.
    Es esta la solución de la App Store de forma segura???
    Apple no se ha documentado formalmente la Objective-C las extensiones que añaden a la JavaScriptCore marco cuando iOS7 fue liberado, su kilometraje puede variar por cualquiera de las 2 técnicas conocidas. No he presentado una aplicación a través de cualquiera de estas técnicas, sin embargo, ha habido informes sobre el MODO de exitosas presentaciones usando la primera técnica (como el utilizado en el ejemplo anterior). Ver mprudhom la respuesta de stackoverflow.com/questions/18920536/…

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here