2

UIwebview でテキストを強調表示する作業を行っています。その中で、テキストを強調表示するために JavaScript 関数を呼び出す canPerformAction メソッドを使用しました。私のWebビューのテキストを見てみましょう。「その部分はとても紛らわしく、散発的です」です。ここで、テキスト「so」だけを選択しても問題はなく、テキストが強調表示されます。

しかし、「とても紛らわしい」などの複数の単語を選択すると、強調表示されますが、無限ループに陥り、canPerformAction メソッドを呼び出し続けます。なぜそれが起こっているのか理解できませんでした。

iPad では、テキストを長押しすると選択されます。ここでメソッドが呼び出され、選択したテキストが強調表示されます。次に、青い線をドラッグしてさらにテキストを選択すると(私が言っていることを理解できることを願っています)、canPerformActionが呼び出され、無限ループに陥ります。

シミュレーターでチェックしています。

更新: 次のようにあなたが言ったことを試しました

NSString *selectedString = @"function getSelText()"
                                "{"
                                "alert('document.execute');"
                                "var sel = window.getSelection();"
                                "if(!sel.isCollapsed){"
                                "var selRange = sel.getRangeAt(0);"
                                "document.designMode = 'on';"
                                "sel.removeAllRanges();"
                                "sel.addRange(selRange);"
                                "alert('document.execute 2');"
                                "document.execCommand('HiliteColor', false, '#ffffcc');"
                                "alert('document.execute 3');"
                                "sel.removeAllRanges();"
                                "document.designMode = 'off';"
                                "alert('document.execute 4');"
                                "}"
                                "}";
[webView stringByEvaluatingJavaScriptFromString:selectedString];

I have given the above code in webViewDidFinishLoad.

In CanPerformAction I gave
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{

    if(action == @selector(selectAll:)){

        NSString *setHighlightColorRuling = [NSString stringWithFormat:@"getSelText()"];
        [webView stringByEvaluatingJavaScriptFromString:setHighlightColorRuling];

        return YES;

    }
    return [super canPerformAction:action withSender:sender];

}

シミュレーターでの実行中に、最後の「document.execute 4」までアラートが表示されますが、webview には影響がありません

4

0 に答える 0