No puede usar jQuery para agregar etiquetas <script>
. Esto ha sido preguntado muchas veces. Ver:
usted puede hacerlo con el navegador incorporado en funciones, pero:
¿funcionaría sólo asignar su función a una variable en su página y luego evaluarlo? Algo así como:
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
// add function to page:
NSString * js = @"myFunction = function(){ return \"success!\"; }" ;
[ webView stringByEvaluatingJavaScriptFromString:js ] ;
// execute newly added function:
NSString * result = [ webView stringByEvaluatingJavaScriptFromString:@"myFunction();"] ;
NSLog(@"result=\"%@\"", result) ;
}
actualización ejemplos explícitos:
Debe utilizar el ejemplo anterior como plantilla!
De todos modos, hay 2 partes en el proceso ... La parte Javascript y la parte Objective-C. A nivel de Javascript, que está haciendo esto:
// assign a function to the variable "someFunction":
var someFunction = function(){...};
// call the function in the variable "someFunction":
someFunction();
También puede hacerlo sin asignar la función a una variable, por ejemplo, si no se preocupan por referencia a la función en el futuro. Al hacerlo sin una variable y utilizando una función anónima se ve así:
(function(){...})() ;
i.e.en lugar de hacer var A = <the function>; A();
que está haciendo (<the function>)();
Por último, si su función anónima toma argumentos, como es tu caso, el patrón se ve así:
(function(var0, ..., varN){...})(arg0, ..., argN);
Usando esto como una plantilla para su código, sus extremos JS arriba como:
(function(time) {
$(\".t_h\").each(function(i, obj)
{
if ($(this).text() != time) return;
$(this).parent().find(\"form\").each(function(i, obj) {
obj.submit();
});
});
})(123.456);
Entonces, eso es lo que quiere la vista web para ejecutar ... ese es el código pasamos a la vista web. Pero debe compilar esa cadena en su programa Obj-C, con la "complicación" de insertar el argumento de tiempo actual (123.456
en el código anterior).
Parece que este:
NSString * jsTemplate =
@"(function(time) {"
@" $(\".t_h\").each(function(i, obj) {"
@" if ($(this).text() != time) return;"
@" $(this).parent().find(\"form\").each(function(i, obj) {"
@" obj.submit();"
@" });"
@" });"
@" })(%g);" ;
NSString * js = [ NSString stringWithFormat:jsTemplate, 123.456 ] ;
NSString * result = [ webView stringByEvaluatingJavaScriptFromString:js ] ;
creo que he escrito lo suficiente ahora :)
funciona el ejemplo anterior, y el resultado = "éxito" está impreso en la consola. Sin embargo, cuando uso mi propio javascript en lugar de "éxito", las comillas en blanco se imprimen en la consola. ¿Algunas ideas? –
Si desea ejecutar su función una vez, cambie su código para que sea '(function() {...})()' – nielsbot
Si va a utilizar su función varias veces, use 2 pasos. Asigna tu función a una variable ('submitFormForTime = function (time) {...}') luego cada vez que quieras ejecutar tu función haz 'submitFormForTime (...)'. – nielsbot