2009-12-10 14 views
5

を無効にし、それは離れてスクロールから、WebViewの持つすべてのユーザーの操作を無効にすることは可能ですか?私は、ユーザーがページを見ることができるように(場合によっては物を選択する)、リンクをクリックせずに、フォームのフィールドを右クリック/リフレッシュ/フォーカス/ UI DOMイベント(onclickなど)をトリガーすることを望みます。私はthis questionに見は、WebKitのWebViewの

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

+0

等々?または、実際にカーソルをリンク上に置いても変化しないようにしたいのですか?前者が問題ない場合は、適切なWebViewデリゲートメソッドを実装して、ナビゲーションの試行を無視します。 –

+0

現代のウェブページの問題は、リンクをたどるだけでなく、あらゆる種類のものをクリックで変更できることです。私は事実上、ページを見ることを除いてページとのユーザーのやり取りを無効にしたい。 –

答えて

6

あなたはNSWindowのをサブクラス化し、WebViewのの窓としてのあなたのサブクラスを設定することができます。マウスイベントの影響を受けるコントロールの種類を検出することによって、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 
+0

これはうまくいくと思います。私はそれを行ってあげるよ。 –

+0

これはそれです。私はNSScrollWheelを省略したので、ユーザーはまだページ上をスクロールすることができますが、これはカーソルの変更に奇妙な振る舞いをもたらしますが、そうでなければ必要なのはこれだけです。どうもありがとう! –

+0

'return ['ステートメントの直前に '[[NSCursor arrowCursor] set];を追加して、マウスが動くとすぐにカーソルがリセットされるようにすることができます。 –

0

一つの選択肢(実際には最高ではないが...)自分で作成することをScrollView内のWebViewをラップして、完全にウェブビューで、すべてのユーザーの操作を無効にするだろう。私は、ページ全体が見えるようにWebビューのフレームを調整し、スクロールビューのコンテンツビューにすると思います。

また、WebViewをサブクラス化して特定のアクションを拒否するためにクリックを傍受することもできますが、私はこれに慣れていないので、選択などのアクションを他と区別することは困難です特にコンテキストメニュー)。

役に立てば幸い - 幸運を!

0

これはおそらく、ページ上のすべてのリンク、フォームなどを繰り返して、javascriptで行い、 - [UIWebView stringByEvaluatingJavaScriptFromString:]を使用して無効にすることができます。

+0

残念ながら、私はリンクをたどっているが、Webkit Obj-C DOMインターフェースを介して、ユーザーのやりとりではないので、これは私のために実行可能ではありません。 –

+0

、それがロードされると、その後、ロードだながらも、あなたはfalseにuserInteractionEnabledを設定することができ、すべてを無効にして、上にそのuserinteractionを設定するためのスクリプトを実行します。 –

関連する問題