2012-12-27 9 views
5

Avere un C# WebBrowser control all'interno della mia applicazione WinForms, e di essere a conoscenza del Navigating event, non ho mai si avvicinò con una soluzione elegante e piacevole al seguente:Come distinguere tra un utente che fa clic su un collegamento e la pagina che esegue un reindirizzamento automatico?

  1. Se un utente naviga attivamente a un altro URL, voglio consentire it.
  2. Se la pagina reindirizza "da solo" a un altro URL, desidero annullare .

Per caso 1 ci sono alcuni casi mi vengono in mente: scatta

  • utente un tag a e l'attributo href viene valutata per caricare un altro URL.
  • L'utente fa clic su un elemento con un gestore di eventi javascript onclick che chiama una funzione che utilizza window.location per caricare un altro URL.

Per caso 2 posso immaginare di:

  • La pagina caricata contiene un tag iframe che carica un URL all'interno del IFrame. Questo spara l'evento Navigating.
  • C'è qualche timer JavaScript che viene avviato al caricamento della pagina e quando si attiva, utilizza window.location per caricare un altro URL.
  • La pagina caricata contiene un meta refresh header tag per caricare un altro URL dopo alcuni secondi.

Quindi la mia domanda è:

Come rilevare all'interno della manifestazione Navigating (o qualsiasi altro meccanismo) se un reindirizzamento viene attivata in modo esplicito da parte dell'utente o implicitamente dalla pagina?

Qualche informazione in più

  • Il WebBrowser viene utilizzato all'interno di un basato su Windows applicazione backend CMS.
  • Ho quindi il controllo completo sul contenuto caricato all'interno del controllo WebBrowser.
  • Significa che posso manipolare la stringa HTML completa prima di essere inviata al browser, se necessario.
  • Se è più applicabile, mi piacerebbe anche ottenere soluzioni solo JavaScript che potrei iniettare nell'HTML che viene caricato.

(Si prega di notare che io credo che questo non è un duplicato di this SO posting)

risposta

1

mio prendere su questo è di cattura utente fa clic sul controllo del browser web. Ha impostato un flag che indica che l'utente ha fatto clic sul browser web.Se il flag è true, quindi consentire il reindirizzamento, se non è vero non permetterlo. Assicurati di reimpostare il flag dopo n numero di secondi se non viene effettuato alcun reindirizzamento (o successivo).

1

Sembra che tu stia cercando di ottenere pattern anti-ads/popup/reindirizzamento.

Dal punto di vista del browser web .. cliccando <a href="some.url"> non è diverso da JavaScript window.location = "some.url"; o 302 reindirizzamento risposta. non ci sono segnali espliciti, nessun metodo di convenienza.

Il controllo WebBrowser è solo un proxy per il componente IE. Non puoi intercettare il motore del browser o anche disabilitare/abilitare javascript poiché fa parte dell'opzione di sicurezza di Internet.

È necessario creare una logica speciale per impedire ogni possibile caso di reindirizzamento.

es. verifica la stringa HTML quindi limita alcuni pattern, intestazione o iframe di javascript con Regex.Replace prima del rendering.

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

o intercettare Navigazione URL e cancellare l'URL non sicuri, ecc

Problemi correlati