Pregunta

¿Es posible desactivar toda la interacción del usuario con una vista Web, aparte de desplazamiento? Quiero que el usuario sea capaz de ver la página (y, posiblemente, seleccione cosas), pero no haga clic en enlaces / botón derecho / campos de formulario de enfoque / eventos DOM UI / gatillo de actualización (onclick etc).

esta pregunta puedo deshabilitar el botón derecho y la selección, pero eso no ayuda con los elementos del formulario y el envío de eventos DOM de navegación.

¿Fue útil?

Solución

Se podría subclase NSWindow y establecer su subclase que la ventana de la vista Web. A continuación, puede controlar qué eventos son enviados a la vista Web mediante la detección de qué tipo de control está siendo afectada por el evento de ratón.

Esto es bastante fuerza bruta, pero se desactivará totalmente cualquier eventos de ratón, incluyendo vuelcos etc:

@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

Otros consejos

Una de las opciones (no es realmente la mejor ...) sería envolver la vista Web dentro de un ScrollView que se crea a sí mismo, y luego desactivar toda la interacción del usuario con la vista web completo. Imagino que ajustaría el marco de la vista web para que la página entera era visible, y luego hacer que la vista de contenido de una vista de desplazamiento.

También puede ser capaz de subclase WebView y la intersección clics para rechazar ciertas acciones, pero no tengo ninguna experiencia con esto, y me imagino que sería difícil diferenciar algunas acciones, como la selección, de los demás (especialmente el menú contextual).

Espero que ayude - buena suerte

!

Probablemente se podría hacer esto a través de JavaScript (iterar a través de todos los enlaces, formularios, etc.) en la página y desactivarlos, utilizando - [UIWebView stringByEvaluatingJavaScriptFromString:].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top