2012-11-08 13 views
5

से चयनित टेक्स्ट प्राप्त करें मेरे पास UIWebView है जो htmlString से टेक्स्ट लोड करता है। मैं की जरूरत है जब उपयोगकर्ता पाठ का एक हिस्सा चयन करता है और प्रेस एक बटन, मैं आदेश इसे कहीं और उपयोग करने के लिए यह निकालने में सक्षम हो जाएगा, तो मैं इस कोड का उपयोग कर रहा हूँ:एक uiwebview Xcode

// The JS File 
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"HighlightedString" ofType:@"js" inDirectory:@""]; 
NSData *fileData = [NSData dataWithContentsOfFile:filePath]; 
NSString *jsString = [[NSMutableString alloc] initWithData:fileData encoding:NSUTF8StringEncoding]; 
[WebV2 stringByEvaluatingJavaScriptFromString:jsString]; 

// The JS Function 
NSString *startSearch = [NSString stringWithFormat:@"getHighlightedString()"]; 
[WebV2 stringByEvaluatingJavaScriptFromString:startSearch]; 

NSString *selectedText = [NSString stringWithFormat:@"selectedText"]; 
NSString * highlightedString = [WebV2 stringByEvaluatingJavaScriptFromString:selectedText]; 

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Highlighted String" 
               message:highlightedString 
               delegate:nil 
             cancelButtonTitle:@"Oh Yeah" 
             otherButtonTitles:nil]; 
[alert show]; 

HighlightedString.js के साथ साथ:

/*! 
------------------------------------------------------------------------ 
// Search Highlighted String 
------------------------------------------------------------------------ 
*/ 
var selectedText = ""; 

function getHighlightedString() { 
    var text  = window.getSelection(); 
    selectedText = text.anchorNode.textContent.substr(text.anchorOffset, text.focusOffset - text.anchorOffset); 

} 

// ... 
function stylizeHighlightedString() { 

    var range    = window.getSelection().getRangeAt(0); 
    var selectionContents = range.extractContents(); 
    var span    = document.createElement("span"); 

    span.appendChild(selectionContents); 

    span.setAttribute("class","uiWebviewHighlight"); 
    span.style.backgroundColor = "black"; 
    span.style.color   = "white"; 

    range.insertNode(span); 
} 


// helper function, recursively removes the highlights in elements and their childs 
function uiWebview_RemoveAllHighlightsForElement(element) { 
    if (element) { 
     if (element.nodeType == 1) { 
      if (element.getAttribute("class") == "uiWebviewHighlight") { 
       var text = element.removeChild(element.firstChild); 
       element.parentNode.insertBefore(text,element); 
       element.parentNode.removeChild(element); 
       return true; 
      } else { 
       var normalize = false; 
       for (var i=element.childNodes.length-1; i>=0; i--) { 
        if (uiWebview_RemoveAllHighlightsForElement(element.childNodes[i])) { 
         normalize = true; 
        } 
       } 
       if (normalize) { 
        element.normalize(); 
       } 
      } 
     } 
    } 
    return false; 
} 

// the main entry point to remove the highlights 
function uiWebview_RemoveAllHighlights() { 
    selectedText = ""; 
    uiWebview_RemoveAllHighlightsForElement(document.body); 
} 

मुझे हमेशा परिणाम के रूप में कुछ भी नहीं मिलता है ... अलर्ट व्यू कुछ भी नहीं दिखाता है ... इस कोड के साथ समस्या क्या है? कोई मदद ? कोई विचार ? यह वास्तव में सराहना की जाएगी।

उत्तर

14

समाधान वास्तव में बहुत सरल था और उपर्युक्त कोड के लिए कोई आवश्यकता नहीं थी! भविष्य के किसी भी उपयोगकर्ताओं के लिए बस का उपयोग करें:

NSString *textToSpeech = [WebV2 stringByEvaluatingJavaScriptFromString: @"window.getSelection().toString()"]; 
NSLog(@" -**-*--****-*---**--*-* This is the new select text %@",[WebV2 stringByEvaluatingJavaScriptFromString: @"window.getSelection().toString()"]); 
2
NSString *theSelectedText = [self.webView stringByEvaluatingJavaScriptFromString:@"window.getSelection().toString()"]; 

इस स्ट्रिंग चर के लिए अपने चयन के पास होगा।

+1

आपके योगदान के लिए धन्यवाद ... लेकिन मुझे एक साल पहले जवाब मिला !!! यहां एक अंगूठे हैं :) –

+0

वेबव्यू सामग्री में चयनित टेक्स्ट की आरंभ और समाप्ति सीमा कैसे प्राप्त करें –