【问题标题】:How to determinate stringByEvaluatingJavaScriptFromString evaluation porcess complete?如何确定 stringByEvaluatingJavaScriptFromString 评估过程完成?
【发布时间】:2013-08-08 11:24:52
【问题描述】:

我正在将 html 文件读入UIWebview。在webViewDidFinishLoad 中,我正在为水平滚动做javascript 函数。下面的代码工作正常。但我无法预测 javascript 函数何时完成。

在可见的 web 视图中首先加载 html 文件然后运行脚本。所以我可以确定webViewDidFinishLoad 中的javascript 完成。

- (void)webViewDidFinishLoad:(UIWebView *)webView
{

    NSString *scriptString =@"javascript:function initialize() {  var eelam = document.getElementsByTagName('body')[0]; var ourH = window.innerHeight;var ourW = window.innerWidth;  var fullH = eelam.offsetHeight;  var pageCount = Math.ceil(fullH/ourH)+1; var padval = parseInt((screen.width*10)/100);var currentPage = 0; var newW = pageCount*ourW;eelam.style.height = (ourH - 30)+'px';eelam.style.width = (newW)+'px';eelam.style.webkitColumnGap = '5px'; eelam.style.margin = '25px'; eelam.style['margin-left']='2px';eelam.style.webkitColumnCount = pageCount; window.interface.setPageCount(pageCount);window.interface.setColumnWidth(screen.width);window.interface.setContent(eelam);window.interface.setColumnGap(padval);};";

    // set font
    NSString *jsString = [[NSString alloc] initWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%d%%'",
                          textFontSize];

    [mywebview stringByEvaluatingJavaScriptFromString:scriptString];

    [mywebview stringByEvaluatingJavaScriptFromString:@"javascript:initialize()"];

    [mywebview stringByEvaluatingJavaScriptFromString:jsString];

    // scroll disable
    UIView* row = nil;
    for(row in webView.subviews){
        if([row isKindOfClass:[UIScrollView class] ]){
            UIScrollView* scrollRow = (UIScrollView*) row;
            scrollRow.scrollEnabled = NO;
            scrollRow.bounces = NO;
            scrollRow.pagingEnabled=YES;
        }
    }

// this code is also not use to handle my issue
if ([[mywebview stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]) {

       }


}

请给我建议,

提前致谢,

【问题讨论】:

    标签: javascript ios objective-c uiwebview uiwebviewdelegate


    【解决方案1】:

    函数不是异步的。它在从评估函数返回值之前完成。

    【讨论】:

    • 我不确定您要解决什么问题?让它异步?我不认为这是实际的或容易实现的。
    【解决方案2】:

    "stringByEvaluatingJavaScriptFromString" 是一个同步函数,一旦 javascript 执行完毕就返回回调。

    但是,您可以通过使 javascript 异步运行来使其异步

    示例:[mywebview stringByEvaluatingJavaScriptFromString:@"javascript:initialize()"];

    在Javascript中写一个函数来

    函数初始化(){ setTimeout(function(){ //init},0);

    使用这个你的本地线程将是空的,并会在 3-4 毫秒内立即返回

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多