2013-08-26 26 views
1

我正在嘗試構建一個非常簡單的網頁閱讀器作爲培訓項目。UIWebView和JavaScript:存儲元素引用,然後稍後使用

這裏就是我想要做的事:

  1. 存放在JS變量(touchedElement)
  2. 觸摸元素後來強調元素

遺憾的是它不工作的子字符串。

有什麼建議嗎?

以下是我嘗試存儲觸摸元素:

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部分):

NSString *startSearch = [NSString stringWithFormat:@"uiWebview_HighlightRangeOfTouchedElement(%lu, %lu)", (unsigned long)characterRange.location, (unsigned long)characterRange.length]; 
[myWebView stringByEvaluatingJavaScriptFromString:startSearch]; 

以下是我儘量突出一個子串(JS部分):

// 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); 
       } 
      } 
     } 
    } 
} 

回答

0

原來,Obj-C部分工作正常,但JS已被破壞。這沒東西看。

相關問題