5

私のWinFormsアプリケーション内にC#WebBrowserコントロールを持ち、Navigatingイベントを認識していたので、次のことに対する素晴らしくエレガントな解決策を思いつきませんでした:

  1. ユーザーが積極的に別の URL に移動した場合は、それを許可したいと考えています。
  2. ページが「勝手に」別の URL にリダイレクトする場合は、それをキャンセルしたいと考えています。

ケース1については、私が考えることができるいくつかのケースがあります:

  • aユーザーがタグをクリックすると、href属性が評価されて別の URL が読み込まれます。
  • ユーザーは、別の URL をロードするためonclickに使用する関数を呼び出す JavaScript イベント ハンドラーで要素をクリックします。window.location

ケース2の場合、次のことが想像できます。

  • 読み込まれたページにはiframe、IFrame 内に URL を読み込むタグが含まれています。これにより、Navigatingイベントが発生します。
  • ページの読み込み時に開始される JavaScript タイマーがいくつかあり、それが起動すると、window.location別の URL を読み込むために使用されます。
  • 読み込まれたページには、数秒後に別の URL を読み込むためのmeta refreshヘッダー タグが含まれています。

だから私の質問は:

Navigatingリダイレクトがユーザーによって明示的にトリガーされるか、ページによって暗黙的にトリガーされるかを、イベント (またはその他のメカニズム)内で検出する方法は?

もう少し情報

  • WebBrowser、Windows ベースの CMS バックエンド アプリケーション内で使用されています。
  • したがって、WebBrowser コントロール内にロードされたコンテンツを完全に制御できます。
  • 必要に応じて、ブラウザに送信する前に完全な HTML 文字列を操作できることを意味します。
  • より適切であれば、読み込まれる HTML に挿入できる JavaScript 専用のソリューションも入手したいと考えています。

(これはこのSO投稿の複製ではないと私は信じていることに注意してください)

4

2 に答える 2

1

これに対する私の見解は、Web ブラウザー コントロールでのユーザーのクリックをキャプチャすることです。ユーザーが Web ブラウザーでクリックしたことを示すフラグを設定します。フラグが true の場合はリダイレクトを許可し、true でない場合は許可しません。リダイレクトが行われない場合 (またはその後) は、n 秒後にフラグをリセットしてください。

于 2012-12-27T08:00:36.937 に答える
1

アンチ広告/ポップアップ/リダイレクト パターンを達成しようとしているようです。

Web ブラウザーの観点から見ると、クリック<a href="some.url">は JavaScriptwindow.location = "some.url";302 リダイレクト応答と変わりません。明示的なシグナルはなく、そのような便利なメソッドもありません。

WebBrowser コントロールは、IE コンポーネントへの単なるプロキシです。インターネットセキュリティオプションの一部であるため、ブラウザのエンジンを傍受したり、javascript を無効/有効にしたりすることはできません。

リダイレクトの可能性のあるすべてのケースを防ぐために、特別なロジックを作成する必要があります。

例えば。HTML 文字列を確認してから、レンダリングの前に Regex.Replace を使用して一部の JavaScript パターン、ヘッダー、または iframe を制限します。

var scriptEx = new Regex("<script (.*?)</script>");
var iframeEx = new Regex("<iframe (.*?)</iframe>");

または、ナビゲート URL を傍受し、安全でない URL をキャンセルするなど。

于 2012-12-27T08:02:55.287 に答える