UIWebview получить диапазон выделенного текста и сохранить для дальнейшего использования

0

Я получил диапазон выделенного текста из UIWebView, используя следующую функцию java-скрипта:

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

Я должен сохранить этот диапазон для последующего использования (я хочу использовать этот диапазон, чтобы выделить текст, когда пользователь загружает документ позже). Как я могу сохранить объект java-скрипта (диапазон) в объекте C?

Есть ли какой-либо другой метод для подсветки текста в UIWebview, кроме заданного диапазона?

Теги:
uiwebview

2 ответа

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"];
}

Просто замените старую строку html на highlightString.

0

см. эту статью http://blog.techno-barje.fr/post/2010/10/06/UIWebView-secrets-part3-How-to-properly-call-ObjectiveC-from-Javascript/

и что Как вызвать Objective-C из Javascript?

вы можете отправить некоторую строку в свой UIWebView, используя скрипт

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

ваш url должен иметь определенную схему fe myappcomand://

и вы можете обрабатывать его с помощью метода UIWebViewDelegate (установить некоторый объект в качестве делегата UIWebView, например, 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();

см. Странное поведение с range.toString()

  • 0
    Но моя проблема в том, как я могу преобразовать объект диапазона в строку. Объект Range состоит из начального контейнера, конечного контейнера, начального смещения, конечного смещения. Я могу преобразовать начальное и конечное смещение в строку, потому что они являются целыми числами. Но начальный контейнер и конечный контейнер являются объектами узла.
  • 0
    @PriyankaV что у вас есть, когда вы используете range.toString ()?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню