从 uiwebview Xcode 中获取选定的文本

Posted

技术标签:

【中文标题】从 uiwebview Xcode 中获取选定的文本【英文标题】:get selected text from a uiwebview Xcode 【发布时间】:2012-11-08 08:56:26 【问题描述】:

我有一个UIWebView,它从htmlString 加载文本。 我需要当用户选择文本的一部分并按下按钮时,我将能够提取它以便在其他地方使用它,所以我正在使用这个代码:

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

结果我总是一无所获......警报视图什么也没显示......这段代码有什么问题?有什么帮助吗?有任何想法吗 ?将不胜感激。

【问题讨论】:

【参考方案1】:

解决方案其实很简单,不需要上面的所有代码! 对于任何未来的用户,只需使用:

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

这会将您的选择传递给字符串变量。

【讨论】:

感谢您的贡献...但我在一年前得到了答案!这是一个竖起大拇指:) 如何获取 webview 内容中所选文本的开始和结束范围

以上是关于从 uiwebview Xcode 中获取选定的文本的主要内容,如果未能解决你的问题,请参考以下文章

UIWebview 获取选定文本的范围并保存以备后用

获取 UIWebView 的选定文本

如何从 Swift 3 xcode8 的 UIWebView 中的 url 获取查询字符串参数?

如何获取 UIWebView 中选定文本的坐标(CGRect)?

UIWebView 下一次出现来自搜索问题的单词

显示 UIMenuController 时获取选定的文本