2012-11-08 27 views
5

Tôi có một số UIWebView tải văn bản từ htmlString. tôi cần khi người sử dụng chọn một phần của văn bản và nhấn một nút, tôi sẽ có khả năng giải nén nó để sử dụng nó ở nơi khác, do đó, tôi đang sử dụng mã này:nhận văn bản đã chọn từ một 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]; 

Cùng với 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); 
} 

Tôi luôn không nhận được kết quả gì ... Chế độ xem cảnh báo không hiển thị ... Vấn đề với mã này là gì? Bất kỳ giúp đỡ? Bất kỳ ý tưởng? Nó sẽ được thực sự đánh giá cao.

Trả lời

14

Giải pháp thực sự khá đơn giản và không cần tất cả các mã ở trên! Đối với bất kỳ người dùng trong tương lai chỉ cần sử dụng:

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

này sẽ vượt qua lựa chọn của bạn vào biến chuỗi.

+1

cảm ơn sự đóng góp của bạn ... nhưng tôi đã nhận được câu trả lời một năm trước !!! đây là một dấu hiệu thích hợp :) –

+0

cách nhận phạm vi bắt đầu và kết thúc của văn bản đã chọn trong nội dung webview –

Các vấn đề liên quan