0

次の Java スクリプト関数を使用して、UIWebView から選択したテキストの範囲を取得しました。

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

後で使用するために、この範囲を保存する必要があります (後でユーザーがドキュメントを読み込んだときに、この範囲を使用してテキストを強調表示したい)。Objective CでJavaスクリプトオブジェクト(範囲)を保存するにはどうすればよいですか?

範囲を指定する以外に、UIWebview でテキストをハイライトする方法はありますか?

4

2 に答える 2

0

その投稿を参照してください http://blog.techno-barje.fr/post/2010/10/06/UIWebView-secrets-part3-How-to-properly-call-ObjectiveC-from-Javascript/

JavascriptからObjective-Cを呼び出す方法は?

スクリプトを使用して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() の奇妙な動作を参照してください。

于 2013-10-10T10:40:44.370 に答える
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文字列をhighlightedStringに置き換えるだけです。

于 2013-11-15T07:24:16.557 に答える