uiwebview javascript没有返回变量但返回警报

时间:2014-12-26 01:23:38

标签: javascript ios uiwebview

我在javascript中有这个功能:

function getResponse(){
    setInterval(function(){
        value = player.getCurrentTime();
        getValue(value);
    },100);
}
function getValue(value){
    var lines  = value;
    //alert("Value is: " + lines);
    return lines;
}

当我想让线变量时,我没有得到任何回应;

NSString *response = [self.webView stringByEvaluatingJavaScriptFromString:@"getResponse()"];
NSString *resonse2 = [self.webView stringByEvaluatingJavaScriptFromString:@"getValue();"];

NSLog(@"oh %@ %@",response,resonse2);

但如果我取消警报,警报会返回正确的响应。我不知道我需要做什么。

谢谢!

1 个答案:

答案 0 :(得分:0)

function getResponse(){
    setInterval(function(){
        value = player.getCurrentTime();
        getValue(value);
    },100);
}

因此该函数在100 ms后异步调用匿名函数。 经过100毫秒后,它会将value设置为当前时间,并调用getValue() 我不知道value来自哪里或哪里,但我会假设它在范围内(可能是全球性的)

function getValue(value){
    var lines  = value;
    //alert("Value is: " + lines);
    return lines;
}

此函数基本上只返回给定的值。我真的不知道JS的范围规则,但是当你从iOS调用它时,你没有传入任何东西,所以也许它获得了前一个(gloabl?)value变量的值。

那么我们在iOS中做了什么? NSString *response = [self.webView stringByEvaluatingJavaScriptFromString:@"getResponse()"]; NSString *resonse2 = [self.webView stringByEvaluatingJavaScriptFromString:@"getValue();"];

首先,我们致电getResponse(),在100ms 之后启动对getValue() 的异步调用。

然后,我们立即自己调用getValue(),没有参数,并返回到响应。

然而,当显示警报时它会起作用。我的JS知识有点缺乏,但我猜它是因为显示警报占用了等待100毫秒的时间。然后,在警报完成时,(全局?)变量value已由getResponse()填充,这意味着它返回值。

我们如何解决这个问题? 同步完成这一切有什么问题吗?我们必须有2个功能吗? 我原来的想法是,为什么我们不能这样做:

function getCurrentTime() {
    return player.getCurrentTime();
}