除了滚动之外,是否可以禁用与WebView的所有用户交互?我希望用户能够看到页面(并可能选择内容),但不能单击链接/右键单击/刷新/焦点表单字段/触发UI DOM事件(onclick等)。
我在this question上看到我可以禁用右键单击和选择,但这对表单元素和导航发送DOM事件没有帮助。
答案 0 :(得分:6)
您可以继承NSWindow并将您的子类设置为WebView的窗口。然后,您可以通过检测鼠标事件影响的控件类型来控制将哪些事件发送到WebView。
这是非常强大的力量,但将完全禁用任何鼠标事件,包括翻转等:
@interface WebViewEventKillingWindow : NSWindow
{
IBOutlet WebView* myWebView;
}
@end
@implementation WebViewEventKillingWindow
- (void)sendEvent:(NSEvent*)event
{
NSView* hitView;
switch([event type])
{
case NSScrollWheel:
case NSLeftMouseDown:
case NSLeftMouseUp:
case NSLeftMouseDragged:
case NSMouseMoved:
case NSRightMouseDown:
case NSRightMouseUp:
case NSRightMouseDragged:
hitView = [myWebView hitTest:[event locationInWindow]];
if([hitView isDescendantOf:myWebView] &&
!([hitView isKindOfClass:[NSScroller class]] ||
[hitView isKindOfClass:[NSScrollView class]]))
{
return;
}
break;
default:
break;
}
[super sendEvent:event];
}
@end
答案 1 :(得分:0)
一个选项(不是最好的......)将WebView包装在您自己创建的ScrollView中,然后完全禁用与Web视图的所有用户交互。我想你会调整网页视图的框架,以便整个页面可见,然后将其作为滚动视图的内容视图。
您也可以将WebView子类化并拦截点击以拒绝某些操作,但我对此没有任何经验,并且我认为很难将某些操作(例如选择)与其他操作区分开来(特别是上下文菜单)。
希望有所帮助 - 祝你好运!
答案 2 :(得分:0)
您可以通过javascript(遍历所有链接,表单等)在页面上执行此操作并使用 - [UIWebView stringByEvaluatingJavaScriptFromString:]停用它们。