Pergunta

É possível desativar toda a interação do usuário com um WebView, além de rolar? Quero que o usuário possa ver a página (e possivelmente selecionar as coisas), mas não clique em Links/clique com o botão direito do mouse/atualização/foco Formulário Campos/Trigger UI DOM Eventos (OnClick etc).

Eu vejo essa questão Posso desativar o clique e a seleção do botão direito, mas isso não ajuda com os elementos do formulário e a navegação enviando eventos DOM.

Foi útil?

Solução

Você pode subclasse NSWIDOW e definir sua subclasse como a janela da WebView. Você pode controlar quais eventos são enviados para o WebView detectando que tipo de controle está sendo afetado pelo evento do mouse.

Isso é uma força bastante bruta, mas desativará totalmente quaisquer eventos do mouse, incluindo rollovers 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

Outras dicas

Uma opção (não é realmente a melhor ...) seria embrulhar o WebView dentro de uma exibição do ScrollView que você cria e, em seguida, desative toda a interação do usuário com a visualização da Web completamente. Eu imagino que você ajustaria o quadro da Web View para que a página inteira estivesse visível e, em seguida, o tornasse a visualização de conteúdo de uma visualização de rolagem.

Você também pode ser capaz de subclasse WebView e interceptar cliques para rejeitar certas ações, mas não tenho nenhuma experiência com isso, e imagino que seria difícil diferenciar algumas ações, como a seleção, de outros (especialmente o menu contextual ).

Espero que ajude, boa sorte!

Você provavelmente poderia fazer isso via JavaScript (iterar através de todos os links, formulários, etc.) na página e desativá -los, usando -[uiwebview stringbyByEvaluatingjavaScriptFromString:].

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top