문제

스크롤링을 제외하고는 웹 뷰와 모든 사용자 상호 작용을 비활성화 할 수 있습니까? 사용자가 페이지를 볼 수 있기를 원하지만 링크를 클릭/오른쪽 클릭/새로 고침/포커스 양식 필드/트리거 UI DOM 이벤트 (On Click 등)를 클릭하지 않기를 원합니다.

나는 본다 이 질문 마우스 오른쪽 클릭 및 선택을 비활성화 할 수 있지만 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

다른 팁

한 가지 옵션 (실제로는 가장 좋지 않습니다 ...)은 자신을 생성하는 스크롤 뷰 안에 웹 뷰를 래핑 한 다음 웹 뷰와의 모든 사용자 상호 작용을 완전히 비활성화하는 것입니다. 전체 페이지가 보이도록 웹 뷰의 프레임을 조정 한 다음 스크롤보기의 컨텐츠보기로 만듭니다.

또한 WebView를 서브 클래스 및 인터셉트 클릭으로 특정 작업을 거부 할 수 있지만 이에 대한 경험이 없으며 선택과 같은 일부 작업 (특히 상황에 맞는 메뉴와 같은 일부 조치를 구별하기가 어렵다고 생각합니다. ).

도움이되기를 바랍니다 - 행운을 빕니다!

아마도 페이지의 JavaScript (모든 링크, 양식 등)를 통해이 작업을 수행하고 [uiwebview stringbaluatingJavaScriptFromString :]를 사용하여 비활성화 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top