如何在按空格键时禁用WebFrameView pageDown滚动?

时间:2014-03-01 01:54:28

标签: objective-c cocoa webkit

我正在WebView中构建一个带有实时预览(objective-C,Mac OS X)的HTML编辑器。到目前为止一切都很好,几乎可以获得我需要的所有功能:两个视图(NSTextView和WebView)同步滚动,预览完美呈现。我的一个问题是WebView对空格键的默认反应:向下滚动。我花了很多时间挖掘WebKit源代码,试图在没有成功的情况下禁用它。我试图将WebView子类化并在那里捕获keyDown,为WebFrameView调用keyDown,拒绝firstRsponder状态......没有太多运气。我在这里缺少什么?任何想法如何摆脱这种行为将不胜感激。

1 个答案:

答案 0 :(得分:2)

同样在这里。作为一个实验,我使用NSEvent.addLocalMonitorForEventsMatchingMask拦截了所有关键事件,将每个空间映射到下划线:我在NSTextView中获得了下划线而不是空格,但WebView一直向下滚动。我猜WebView正在拦截不同级别的键盘事件。

但是,我注意到只有当应用程序在处理时(或多或少同时)更新WebView内容时,才会发生向下滚动问题。

因此我插入了一个延迟 - 仅在用户不活动的一定时间间隔后更新WebView内容 - 例如:

private var _refreshAskCount = 0
func refreshWebViewIfIdontAskYouAgainInTheNext(#seconds: Double) {
    let count = ++self._refreshAskCount
    let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(seconds * Double(NSEC_PER_SEC)))
    dispatch_after(delay, dispatch_get_main_queue()) {
        if count == self._refreshAskCount {
            self.renderWebView()
        }
    }
}

这似乎解决了这个问题,或者至少可以大大减少它。