除了滚动之外,是否可以禁用与WebView的所有用户交互?我希望用户能够看到页面(并可能选择东西),但不要单击链接/右键单击/刷新/聚焦表单域/触发UI DOM事件(onclick等)。禁用WebKit WebView
我在this question上看到我可以禁用右键单击和选择,但这并不能帮助表单元素和导航发送DOM事件。
除了滚动之外,是否可以禁用与WebView的所有用户交互?我希望用户能够看到页面(并可能选择东西),但不要单击链接/右键单击/刷新/聚焦表单域/触发UI DOM事件(onclick等)。禁用WebKit WebView
我在this question上看到我可以禁用右键单击和选择,但这并不能帮助表单元素和导航发送DOM事件。
您可以继承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
我认为这可能有效。我会放弃它。 – 2009-12-10 17:04:13
是的,这是它。我忽略了NSScrollWheel,这样用户仍然可以在页面上滚动,这会在更改光标时引入一些奇怪的行为,但除此之外,这只是我所需要的。非常感谢! – 2009-12-10 17:17:31
您可以随时在'return;'语句之前添加一个[[NSCursor arrowCursor] set];这样,只要鼠标移动,光标就会重置。 – 2009-12-10 23:51:46
一个选项(不是最好的......)是将WebView封装在自己创建的ScrollView中,然后完全禁用所有与Web视图的用户交互。我想你会调整Web视图的框架,以便整个页面可见,然后使其成为滚动视图的内容视图。
您也许可以对WebView进行子类化并拦截点击以拒绝某些操作,但我对此没有任何经验,并且我认为很难区分某些操作(如选择)与其他操作(特别是上下文菜单)。
希望有所帮助 - 祝你好运!
你可能可以通过javascript(遍历所有链接,表单等)在页面上做到这一点,并停用它们,使用 - [UIWebView stringByEvaluatingJavaScriptFromString:]。
不幸的是,这对我来说不可行,因为我正在关注链接,但是通过Webkit Obj-C DOM接口而不是用户交互。 – 2009-12-10 17:05:12
好吧,您可以在加载时将userInteractionEnabled设置为false,然后在加载后运行脚本以禁用所有内容并将其用户交互设置为打开。 – 2009-12-10 20:07:43
当你想“禁止所有用户交互”是不够的的WebView简单地忽略点击导航链接等等?或者你是否真的希望光标在链接上悬停时不要改变?如果前者正常,则实施适当的WebView委托方法以忽略导航尝试。 – 2009-12-10 11:46:57
现代网页的问题是,各种东西都可以通过点击来改变,而不仅仅是链接跟随。我实际上想要禁用用户与页面的交互,除了查看它。 – 2009-12-10 17:06:15