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 には影響がありません