WebKit WebView를 비활성화합니다
문제
스크롤링을 제외하고는 웹 뷰와 모든 사용자 상호 작용을 비활성화 할 수 있습니까? 사용자가 페이지를 볼 수 있기를 원하지만 링크를 클릭/오른쪽 클릭/새로 고침/포커스 양식 필드/트리거 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 :]를 사용하여 비활성화 할 수 있습니다.