スクロールを除いて、WebViewとのすべてのユーザーインタラクションを無効にすることは可能ですか?ユーザーがページを表示できるようにしたい(場合によっては選択できるようにしたい)が、リンクをクリック/右クリック/更新/フォームフィールドにフォーカス/ UI DOMイベント(onclickなど)をトリガーしないようにします。
この質問では、右クリックと選択を無効にできますが、フォーム要素とナビゲーションが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
1つのオプション(実際には最善ではありません...)は、自分で作成したScrollView内にWebViewをラップしてから、Webビューとのすべてのユーザー操作を完全に無効にすることです。ページ全体が表示されるようにWebビューのフレームを調整してから、スクロールビューのコンテンツビューにすることを想像してみてください。
WebViewをサブクラス化し、クリックをインターセプトして特定のアクションを拒否することもできますが、これについての経験はなく、選択などの一部のアクションを他のアクション(特にコンテキストメニュー)と区別するのは難しいと思います。 )。
それがお役に立てば幸いです。
おそらく、ページ上のjavascript(すべてのリンク、フォームなどを反復処理)を介してこれを行い、-[UIWebView stringByEvaluatingJavaScriptFromString:]を使用してそれらを非アクティブ化することができます。