2013-10-10 47 views
0

我使用下面的Java腳本函數得到了一個UIWebView所選文本的範圍:UIWebView中獲得所選文本的範圍,並保存供以後使用

function getRangeForSelectedText() { 
    var selection = window.getSelection(); 
    var range = selection.getRangeAt(0); 
} 

我要救這個範圍內供以後使用(我想使用此範圍在用戶稍後加載文檔時突出顯示文本)。我如何保存目標C中的Java腳本對象(範圍)?

是否有任何其他方法在UIWebview中高亮文本而不是給出範圍?

回答

0

看到後 http://blog.techno-barje.fr/post/2010/10/06/UIWebView-secrets-part3-How-to-properly-call-ObjectiveC-from-Javascript/

How to call Objective-C from Javascript?

您可以使用腳本

function sendURLToUIWebView(url) { 
    var iframe = document.createElement("IFRAME"); 
    iframe.setAttribute("src", url); 
    document.documentElement.appendChild(iframe); 
    iframe.parentNode.removeChild(iframe); 
} 

您的網址發送一些字符串到您的UIWebView應該有具體的舍姆F.E. myappcomand://

,您可以用UIWebViewDelegate方法處理它(設置一些對象的UIWebView的委託,FE一些的UIViewController)

- (BOOL)webView:(UIWebView *)aWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
BOOL shouldLoad = YES; 
    if ([request.URL.scheme isEqualToString:@"myappcomand"]) { 
     shouldLoad = NO; 
     // parse url string "request.URL" and extract your parameters to store them 
    } 
return shouldLoad; 
} 

JavaScript函數

function sendURLToUIWebView(url) { 
    var iframe = document.createElement("IFRAME"); 
    iframe.setAttribute("src", url); 
    document.documentElement.appendChild(iframe); 
    iframe.parentNode.removeChild(iframe); 
} 

function getRangeForSelectedText() { 
    var selection = window.getSelection(); 
    var range = selection.getRangeAt(0); 
    var url = "myappcomand://" + "range=" + range; // you should convert range to string 
    sendURLToUIWebView(url); 
} 

更新:

範圍到字符串

range.toString().replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '') 

或只是var rangeText = window.getSelection().toString();

看到Strange behaviour with range.toString()

+0

但我的問題是如何我可以將範圍對象轉換爲一個字符串。範圍對象由開始容器,結束容器,起始偏移量,結束偏移量組成。我可以將起始偏移量和結束偏移量轉換爲字符串,因爲它們是整數。但是開始容器和結束容器是節點對象。 –

+0

@PriyankaV當你使用range.toString()時,你有什麼streeng? – BergP

+0

range.toString()。replace(/ \ s +/g,'').replace(/^\ s + | \ s + $/g,'')這是給出選定的文本。但我不需要選定的文本 –

0

我面臨同樣的問題。我沒有選擇範圍,而是在js中使用下面的函數突出顯示選定的文本,並在UIWebView中獲取全文,並在sqlite中替換它。

JS代碼:

function highlight() { 

    if (typeof window.getSelection != "undefined") { 
     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 = "rgb(237,191,245)"; 
     span.style.color = "black"; 
     range.insertNode(span); 
    } 
} 

目標C:

- (void) highlightText 
{ 
    NSString *highlightFunction = [NSString stringWithFormat:@"highlight()"]; 
    [detailedWebView stringByEvaluatingJavaScriptFromString:startSearch]; 
    NSString *highlightedString = [detailedWebView 
         stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"]; 
} 

只需使用highlightedString取代舊的HTML字符串。

相關問題