5

スクロールを除いて、WebViewとのすべてのユーザーインタラクションを無効にすることは可能ですか?ユーザーがページを表示できるようにしたい(場合によっては選択できるようにしたい)が、リンクをクリック/右クリック/更新/フォームフィールドにフォーカス/ UI DOMイベント(onclickなど)をトリガーしないようにします。

この質問では、右クリックと選択を無効にできますが、フォーム要素とナビゲーションがDOMイベントを送信するのに役立ちません。

4

3 に答える 3

6

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
于 2009-12-10T13:54:14.050 に答える
0

1つのオプション(実際には最善ではありません...)は、自分で作成したScrollView内にWebViewをラップしてから、Webビューとのすべてのユーザー操作を完全に無効にすることです。ページ全体が表示されるようにWebビューのフレームを調整してから、スクロールビューのコンテンツビューにすることを想像してみてください。

WebViewをサブクラス化し、クリックをインターセプトして特定のアクションを拒否することもできますが、これについての経験はなく、選択などの一部のアクションを他のアクション(特にコンテキストメニュー)と区別するのは難しいと思います。 )。

それがお役に立てば幸いです。

于 2009-12-10T02:41:09.403 に答える
0

おそらく、ページ上のjavascript(すべてのリンク、フォームなどを反復処理)を介してこれを行い、-[UIWebView stringByEvaluatingJavaScriptFromString:]を使用してそれらを非アクティブ化することができます。

于 2009-12-10T02:45:17.537 に答える