2012-11-08 17 views
5

Birvar, htmlString gelen metni yükler. kullanıcı metnin bir kısmını seçer ve bir düğme i başka bir yerde kullanmak için bunu çıkarma yeteneğine sahip olacak bastığında ihtiyacım, bu yüzden bu kodu kullanıyorum: HighlightedString.js birlikteBir uiwebview Xcode seçili metnini alın

// 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]; 

:

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

Her zaman sonuç olarak hiçbir şey elde edemiyorum ... Uyarı görünümü hiçbir şey göstermiyor ... Bu kodla ilgili sorun nedir? Herhangi bir yardım ? Herhangi bir fikir ? Bu gerçekten takdir edilecektir.

cevap

14

Çözüm aslında oldukça basitti ve yukarıdaki kodların hepsine gerek yok! ileride kullanıcıları için sadece kullanın:

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

Bu dize değişkenine seçiminizi geçecek.

+1

Katkınız için teşekkürler ... ama bir yıl önce cevabı aldım !!! İşte bir başparmak yukarıya :) –

+0

webview içeriğinde seçilen metnin başlangıç ​​ve bitiş aralığını nasıl alacaksınız –