当javascript函数被触发时,如何在目标c UIWebView中监听

时间:2015-03-03 08:39:22

标签: ios uiwebview

如何在Objective C中监听是否调用javascript方法?

例如javascript:

<script>
function someJsFunction(){}
</script>

如何使用UIWebView在目标c中实现侦听器来侦听正在调用的js函数。

我如何使用以下组件? UIWebView shouldStartLoadWithRequest

如何在UIWebView中获取输入框值?

1 个答案:

答案 0 :(得分:3)

如果您想通过目标c在js中打印控制台消息,那么您可以使用下面的代码。

//fetch JSContext
//webView is object of UIWebView , in which your js files are already injected
JSContext *context =  [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//evaluate script on context object
[context evaluateScript:@"var console = {};"]; // make console an empty object
// when ever you use "console.log('')" in your JS it will call below block
context[@"console"][@"log"] = ^(NSString *message)
{
    NSLog(@"Console msg from js:%@", message);
};

要从目标c执行js函数,请使用以下代码。

NSString *evalScript = [NSString stringWithFormat:@"someJSFun(%@)",param];
[context evaluateScript:evalScript];

现在,如果你想从你的JS调用目标c函数,你可以使用如下的块。

//Suppose you want to call "someObjCFun(param)" from your js then 
context[@"someObjCFun"]= ^(JSValue *message)
{
    //TODO
    //This block will be executed when you will call 'someObjCFun(param)' from your js
};

因此,如果您希望文本框值在目标c中,只需使用上面的块并将文本框值作为参数传递。

P.S。你的JS应该在UIWebView中注入。