cocoa - type - Deshabilitar un WebView WebView
wkwebview example (3)
¿Es posible deshabilitar toda la interacción del usuario con un WebView, además de desplazarse? Quiero que el usuario pueda ver la página (y posiblemente seleccionar cosas), pero no hacer clic en los enlaces / campos de formulario de clic derecho / actualizar / enfocar / desencadenar eventos de UI DOM (onclick, etc.).
Veo en esta pregunta que puedo deshabilitar el clic derecho y la selección, pero eso no ayuda con los elementos de formulario y la navegación al enviar eventos DOM.
Podría subclase NSWindow y establecer su subclase como la ventana de WebView. A continuación, puede controlar qué eventos se envían a WebView detectando qué tipo de control se ve afectado por el evento del mouse.
Esto es bastante fuerza bruta, pero desactivará por completo cualquier evento del mouse, incluidos los 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
Probablemente puedas hacer esto a través de javascript (iterar a través de todos los enlaces, formularios, etc.) en la página y desactivarlos, usando - [UIWebView stringByEvaluatingJavaScriptFromString:].
Una opción (no es realmente la mejor ...) sería envolver WebView dentro de un ScrollView que usted mismo crea, y luego desactivar por completo la interacción del usuario con la vista web. Imagino que ajustaría el marco de la vista web para que toda la página estuviera visible y luego la convertiría en la vista de contenido de una vista de desplazamiento.
También es posible que pueda subclasificar WebView e interceptar 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 otras (especialmente el menú contextual). )
¡Espero que ayude, buena suerte!