Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UIWebView和JavaScript:存储元素引用,然后在以后使用_Javascript_Ios_Uiwebview - Fatal编程技术网

UIWebView和JavaScript:存储元素引用,然后在以后使用

UIWebView和JavaScript:存储元素引用,然后在以后使用,javascript,ios,uiwebview,Javascript,Ios,Uiwebview,我试图建立一个非常简单的网页阅读器作为一个培训项目 以下是我正在尝试做的: 将触摸的元素存储在JS变量(touchedElement)中 稍后高亮显示该元素的子字符串 不幸的是,它不起作用 有什么建议吗 以下是我尝试存储触摸元素的方式: UITouch *aTouch = [touches anyObject]; location = [aTouch locationInView:myWebView]; NSString *js = [NSString stringWit

我试图建立一个非常简单的网页阅读器作为一个培训项目

以下是我正在尝试做的:

  • 将触摸的元素存储在JS变量(touchedElement)中
  • 稍后高亮显示该元素的子字符串
  • 不幸的是,它不起作用

    有什么建议吗

    以下是我尝试存储触摸元素的方式:

        UITouch *aTouch = [touches anyObject];
        location = [aTouch locationInView:myWebView];
        NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).innerText", location.x, location.y];
        NSString *text = [myWebView stringByEvaluatingJavaScriptFromString:js];
        NSString *js2 = [NSString stringWithFormat:@"var touchedElement = document.elementFromPoint(%f, %f);", location.x, location.y];
        tagName = [myWebView stringByEvaluatingJavaScriptFromString:js2];
    
    下面是我如何突出显示子字符串(Obj-C部分):

    下面是我如何突出显示子字符串(JS部分):

    //开始搜索的主要入口点
    函数uiWebview\u touchedelement的HighlightRange(idx,长度){
    uiWebview_RemoveAllHighlights();
    uiWebview\u触摸屏的高亮度范围(触摸屏,idx,长度);
    }
    函数uiWebview\u touchedelement的HighlightRange(元素,idx,长度)
    if(元素){
    如果(element.nodeType==3){//Text节点
    while(true){
    //如果(计数器<1){
    var value=element.nodeValue;//在文本节点中搜索关键字
    如果(idx<0)中断;//未找到,则中止
    //(价值分割);
    //我们为匹配关键字的每个部分创建一个SPAN元素
    var span=document.createElement(“span”);
    var text=document.createTextNode(value.substr(idx,length));
    span.appendChild(文本);
    setAttribute(“类”、“uiWebviewHighlight”);
    span.style.backgroundColor=“黄色”;
    span.style.color=“黑色”;
    uiWebview_SearchResultCount++;//更新计数器
    text=document.createTextNode(value.substr(idx+关键字.length));
    element.deleteData(idx,value.length-idx);
    var next=element.nextSibling;
    element.parentNode.insertBefore(span,next);
    element.parentNode.insertBefore(文本,下一步);
    元素=文本;
    }
    }如果(element.nodeType==1){//element节点
    if(element.style.display!=“无”&&element.nodeName.toLowerCase()!=“选择”){
    对于(var i=element.childNodes.length-1;i>=0;i--){
    uiWebview_touchedelement的HighlightRange(element.childNodes[i],关键字,idx,长度);
    }
    }
    }
    }
    }
    
    发现Obj-C部件工作正常,但JS坏了。这里没什么可看的

    NSString *startSearch   = [NSString stringWithFormat:@"uiWebview_HighlightRangeOfTouchedElement(%lu, %lu)", (unsigned long)characterRange.location, (unsigned long)characterRange.length];
    [myWebView stringByEvaluatingJavaScriptFromString:startSearch];
    
    // the main entry point to start the search
    function uiWebview_HighlightRangeOfTouchedElement(idx, length) {
        uiWebview_RemoveAllHighlights();
        uiWebview_HighlightRangeOfTouchedElement(touchedElement, idx, length);
    }
    
    function uiWebview_HighlightRangeOfTouchedElement(element, idx, length)
        if (element) {
            if (element.nodeType == 3) {        // Text node
                while (true) {
                    //if (counter < 1) {
                    var value = element.nodeValue;  // Search for keyword in text node
                    if (idx < 0) break;             // not found, abort
    
                    //(value.split);
    
                    //we create a SPAN element for every parts of matched keywords
                    var span = document.createElement("span");
                    var text = document.createTextNode(value.substr(idx, length));
                    span.appendChild(text);
    
                    span.setAttribute("class","uiWebviewHighlight");
                    span.style.backgroundColor="yellow";
                    span.style.color="black";
    
                    uiWebview_SearchResultCount++;    // update the counter
    
                    text = document.createTextNode(value.substr(idx+keyword.length));
                    element.deleteData(idx, value.length - idx);
                    var next = element.nextSibling;
                    element.parentNode.insertBefore(span, next);
                    element.parentNode.insertBefore(text, next);
                    element = text;
                }
            } else if (element.nodeType == 1) { // Element node
                if (element.style.display != "none" && element.nodeName.toLowerCase() != 'select') {
                    for (var i=element.childNodes.length-1; i>=0; i--) {
                        uiWebview_HighlightRangeOfTouchedElement(element.childNodes[i],keyword, idx, length);
                    }
                }
            }
        }
    }