为啥我不能覆盖 WebView 'copy:' 方法?
Posted
技术标签:
【中文标题】为啥我不能覆盖 WebView \'copy:\' 方法?【英文标题】:Why I can not override WebView 'copy:' method?为什么我不能覆盖 WebView 'copy:' 方法? 【发布时间】:2014-08-14 19:00:16 【问题描述】:我想重写一些 WebView 的编辑操作方法。于是,我创建了 MyWebView,它是一个 WebView 的子类,并重新定义了以下方法
- (void)copy:(id)sender;
- (void)cut:(id)sender;
这些方法列在公共 WebView API 中,即“复制:” https://developer.apple.com/library/mac/documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/Reference/Reference.html#//apple_ref/occ/instm/WebView/copy:
遗憾的是,我重新定义的方法从未被调用过。为什么?
【问题讨论】:
【参考方案1】:这是因为第一响应者是您覆盖的其他类。但是,不能使用您想要子类化的类(将其链接到 WebView)。
在这种情况下,documentView (WebView->-WebFrame->WebFrameView->documentView) 是第一响应者,它的实现是(检查宏 [此处][1]):
#define FORWARD(name) \
- (void)name:(id)sender [self _performResponderOperation:_cmd with:sender];
这段代码调用私有方法,所以这是一个死胡同。
我认为您应该尝试注入 javascript 来检测复制并调用负责任的 Obj-C 方法。第二种解决方案可能是覆盖 NSApplication 并检查所有发送的事件并获取您需要的事件(未经验证 + 性能下降)。
[1][http://www.opensource.apple.com/source/WebKit/WebKit-7537.74.9/mac/WebView/WebView.mm]
【讨论】:
以上是关于为啥我不能覆盖 WebView 'copy:' 方法?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Go Back 不能使用此源代码在 webview android 应用程序中工作?
为啥我不能在 C++0x 中对 std::shared_ptr 的向量执行 std::copy?
为啥我不能删除或删除 iPhone / iPad Duplicate Enterprise App Icon Copy?