5

除了滚动之外,是否可以禁用所有用户与 WebView 的交互?我希望用户能够看到页面(并可能选择内容),但不能单击链接/右键单击/刷新/聚焦表单字段/触发 UI DOM 事件(onclick 等)。

我在这个问题上看到我可以禁用右键单击和选择,但这对表单元素和导航发送 DOM 事件没有帮助。

4

3 回答 3

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
于 2009-12-10T13:54:14.050 回答
0

一种选择(不是最好的......)是将 WebView 包装在您自己创建的 ScrollView 中,然后完全禁用所有用户与 Web 视图的交互。我想您会调整 Web 视图的框架以使整个页面可见,然后使其成为滚动视图的内容视图。

您也许还可以继承 WebView 并拦截单击以拒绝某些操作,但我对此没有任何经验,我想很难将某些操作(例如选择)与其他操作区分开来(尤其是上下文菜单)。

希望有帮助 - 祝你好运!

于 2009-12-10T02:41:09.403 回答
0

您可能可以通过页面上的 javascript(遍历所有链接、表单等)执行此操作并使用 -[UIWebView stringByEvaluatingJavaScriptFromString:] 停用它们。

于 2009-12-10T02:45:17.537 回答