检测UIWebView文本选择中的文本选择更改

时间:2011-12-11 20:23:05

标签: javascript ios uiwebview

有很多关于如何在UIWebView中获取所选文本的指南,但我似乎无法找到有关如何检测选择更改的任何内容。我知道我可以在其他地方检测点击并始终获得最新的选择,但我想创建一个包含所有这些功能的独立视图。

我目前有一个视图,它包含UIWebView实例并处理解析并将内容传递到Web视图。据我所知,检测点击需要自定义窗口实现(指示here)。我想关注问题的分离,并尽可能避免任何自定义窗口实现。

任何想法如何才能在视图中实现这一目标?我已经尝试过javascript,但我想我是 不太适合它。

2 个答案:

答案 0 :(得分:1)

您可以使用document.addEventListener("selectionchange"),只要选择发生变化就会触发,并通过网桥将这些更改转发给Obj-C。

桥:

  1. WebViewJavascriptBridge
  2. JavaScriptCore
  3. 示例代码:

    document.addEventListener("selectionchange", function(){
        bridge.send("selectionchange"); // WebViewJavaScriptBridge
        bridge.selectionChanged();  // JavaScriptCore
    }, false);
    

答案 1 :(得分:0)

如果我没有完全弄错,那么在使用UIWebView和javascript组合时,无法检测选择范围是否会发生变化。我的解决方案是轮询选择范围而不是通知其更改。目前我不需要实时更新,因此只知道是否有选择就足够了。根据需要检索文本选择,对于选择更改,我使用UITapGestureRecognizer

为了清除选择,我不得不使用一小段时间。点击后不会立即清除选择。

- (void)tap:(id)sender
{    
    [self updateSelection];
    // A simple hack to detect when selection is cleared.
    [self performSelector:@selector(updateSelection) withObject:self afterDelay:0.5];
}