2012-11-08 20 views
5

Mam UIWebView, który ładuje tekst z htmlString. Muszę gdy użytkownik wybierze część tekstu i naciska przycisk, i będzie być w stanie wyciągnąć go w celu wykorzystania go w innym miejscu, więc używam tego kodu:pobranie zaznaczonego tekstu z 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]; 

Wraz z 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); 
} 

W efekcie zawsze nic nie dostaję ... Widok alertu nie pokazuje nic ... Jaki problem z tym kodem? Jakaś pomoc ? Jakieś pomysły ? Będzie to naprawdę docenione.

Odpowiedz

14

Rozwiązanie było całkiem proste i nie było potrzeby stosowania powyższego kodu! Dla przyszłych użytkowników wystarczy użyć:

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()"]; 

Przepuszcza swój wybór do zmiennej łańcuchowej.

+1

dziękuję za wkład ... ale otrzymałem odpowiedź rok temu !!! oto kciuk w górę :) –

+0

jak uzyskać początkowy i końcowy zakres zaznaczonego tekstu w treści webview –