2010-10-03 14 views
5

Esta página web: http://blog.joins.com/media/folderListSlide.asp?uid=ddatk&folder=3&list_id=9960150alerta Detener Javascript emergente en navegador web C# control de

tiene este código:

<script>alert('¿Ã¹Ù¸¥ Çü½ÄÀÌ ¾Æ´Õ´Ï´Ù.');</script> 

Así que mi control de explorador web muestran una ventana emergente, ¿cómo puedo pasar por alto la ventana emergente sin utilizar SendKeys entran ??

+0

4 espacios antes de una línea lo formatea como código. Para hacer esto, selecciona las líneas y escribe 'ctr-k' –

+0

. ¿No entiendo por qué no puedes borrar o comentar esa línea? –

+0

Lamento decir esto, pero esta pregunta y las preguntas anteriores de @ robert son vagamente bot-ish. Proxies; presentación automática de formularios; suprimir las alertas del navegador sin 'sendkeys'. Sospechoso. Muy sospechoso – Andrew

Respuesta

1

Creo que está navegando por una página dentro de alert(xxx) en su javascript utilizando WebBroswer en una aplicación WinForm? Usted puede tratar de:

broswer.Navigated += (sender, args) => 
    { 
    var document = (sender as WebBrowser).DocumentText; 
    //find the alert scripts and remove/replace them 
    } 
+0

lo siento, no lo entiendo, ¿dónde tengo que poner ese código? para reemplazar, podría usar WebBrowser1.DocumentText = WebBrowser1.DocumentText.Replace ("alert", ""); – robert

+0

@robert: este código se pone en el constructor del formulario. Y no puedes simplemente reemplazar 'alert' con empty. porque 'alert (" hello ");' será '(" hello ");', lo que resulta en errores js. Debe encontrar un método adecuado para reemplazar, realmente depende. –

+0

¿Quiere decir que tengo que poner el código en el vacío privado InitializeComponent() { AQUÍ? – robert

4

Si no va a utilizar siempre la función alert() en su página, también puede simplemente anularlo. Ej .:

<script type="text/javascript"> 
alert = function(){} 
</script> 

Si es necesario utilizar la función de alerta de JavaScript, se puede 'sobrecarga' que:

<script type="text/javascript"> 
var fnAlert = alert; 
alert = function(message,doshow) { 
    if (doshow === true) { 
     fnAlert(message); 
    } 
} 
alert("You won't see this"); 
alert("You will see this",true); 
</script> 
+0

tengo que 'claro'/evitar que emergente desde C#, no tengo código de acceso a ese sitio web, es solo un sitio web aleatorio que bloquea toda mi aplicación con la ventana emergente – robert

+0

Parece que no quieren que su aplicación acceda a su contenido. ¿Es esto cierto? – Andrew

+0

nop es solo una página al azar, solo descubro que no puedo encontrar y reescribir javascript cuando javascriot está solo. si el código fuente tiene solo este código cómo puedes bloquear esa ventana emergente – robert

5

En el controlador de eventos ProgressChanged, se inserta un elemento de script que reemplaza la función Javascript alert con una función de su propia, que no hace nada:

private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) 
    { 
     if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 
     { 
      HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0]; 
      HtmlElement scriptEl = webBrowser1.Document.CreateElement("script"); 
      IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; 
      string alertBlocker = "window.alert = function() { }"; 
      element.text = alertBlocker; 
      head.AppendChild(scriptEl); 
     } 
    } 

Para que esto funcione, es necesario agregar una referencia a Microsoft.mshtml y use mshtml; en su formulario.

+0

Recomendaría esta [respuesta] (http://stackoverflow.com/a/6222430/326608) para una solución solo administrada para la inyección de JavaScript que no requiere implementar una PIA como lo hace mshtml. – user326608

2

solución dada es incorrecto

private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) 
{ 
    if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 
    { 
     HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0]; 
     HtmlElement scriptEl = webBrowser1.Document.CreateElement("script"); 
     IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; 
     string alertBlocker = "window.alert = function() { }"; 
     element.text = alertBlocker; 
     head.AppendChild(scriptEl); 
    } 
} 

Parece manejando un gancho de ventanas para el mensaje es solución

-1

Puede desactivar todas las ventanas emergentes mediante el establecimiento de

webBrowser.ScriptErrorsSuppressed = true; 

A pesar del nombre, esta configuración bloquea realmente todas las ventanas emergentes, incluido alert()

Cuestiones relacionadas