zoukankan      html  css  js  c++  java
  • ios: WebView内高亮搜索

    由于webview 加载的是网页 只能用js 进行页内查找  废话不说上代码

    // 注入 JS 查找
        NSString *resPath = [[NSBundle mainBundle] resourcePath];
        static NSString *jsQuery = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            jsQuery = [NSString stringWithContentsOfFile:[resPath stringByAppendingPathComponent:@"js_plugins.js"] encoding:NSUTF8StringEncoding error:nil];
            
        });
        NSString *js = [NSString stringWithFormat:@"var highlightPlugin = document.getElementById('js_plugins'); 
                        if (highlightPlugin == undefined) { 
                        document.body.innerHTML += '<div id="js_plugins"> 
                        <style type="text/css"> 
                        .utaHighlight { background-color:yellow; } 
                        .selectSpan { background-color:yellow; color:red;} 
                        </style> 
                        </div>'; 
                        %@ 
                        }", jsQuery];
        
        [self stringByEvaluatingJavaScriptFromString:js];
        
        // 清除上次的高亮并设置当前关键字高亮
        [self stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"jQuery('body').removeHighlight().utaHighlight('%@');", str]];
        
        // 获取关键字数量
        NSString *count = [self stringByEvaluatingJavaScriptFromString:@"jQuery('.utaHighlight').length"];
        
        if ([count integerValue]>0) {
            [self focusToFindIndex:0];
        }
    dispatch_once 用单例的话不用每调用一次都读取一次文件,后面就是一些调用一些js文件的方法。
    可扩展上一个下一个,暂时没有实现。
    其他具体文件方法可以看demo
    http://pan.baidu.com/s/1eQAGNPC

    v 14.10.31 更新:

    增加扩展上一个和下一个,其实也很简单

    既然要用到上一个、下一个,肯定要记录下当前的位置,总的数量

    1.定义两个全局变量

    static NSInteger sCount ;//总数量
    static NSInteger sNumber  = 1;//当前位置(默认从1开始)

    2.增加上一个 下一个方法

    - (void)nextFindIndex
    {
        if (sNumber>=sCount) {
            return;
        }
        [self focusToFindIndex:sNumber];
        sNumber ++ ;
    }
    
    - (void)lastFindIndex
    {
        if (sNumber<=0) {
            return;
        }
        sNumber--;
        [self focusToFindIndex:sNumber];
    }

    3.到这里的,之前写focusToFindIndex 方法需要修改

    - (void)focusToFindIndex:(NSInteger)findIndex
    {
        NSString *js = [NSString stringWithFormat:@"scrollToFindIdx(%d);", findIndex];
        CGFloat offset = [[self stringByEvaluatingJavaScriptFromString:js] floatValue];
        
        CGFloat contentHeight = self.scrollView.contentSize.height;
        offset = MIN(offset, contentHeight-self.scrollView.bounds.size.height);
        [self.scrollView setContentOffset:CGPointMake(0, offset) animated:YES];
    }

    同样highlightAllOccurencesOfString 方法也需要修改,即给变量赋值

    // 获取关键字数量
        NSString *count = [self stringByEvaluatingJavaScriptFromString:@"jQuery('.utaHighlight').length"];
        sCount = [count intValue];
        sNumber = 1;
        if ([count intValue]>0) {
            [self focusToFindIndex:0];
        }

    4.完毕

  • 相关阅读:
    用Python完成一个汇率转换器
    鸿蒙如何用JS开发智能手表App
    鸿蒙如何用JS开发智能手表App
    SAP Spartacus SplitViewComponent Migration 的一个具体例子
    SAP Spartacus B2B 页面 Popover Component 的条件显示逻辑
    SAP Spartacus 升级时关于 schematics 的更新
    SAP Spartacus B2B 页面 Disable 按钮的显示原理
    SAP Spartacus B2B 页面 Disable Confirmation 对话框的显示原理
    通过 Feature Level 动态控制 SAP Spartacus 的页面显示
    SAP Commerce Cloud Build Manifest Components
  • 原文地址:https://www.cnblogs.com/yoon/p/4014771.html
Copyright © 2011-2022 走看看