Desde que se publicó el artículo [JavaScript] Personalización de MessageBox, muchos internautas han escrito para preguntar cómo llamar al método ShowInfo en el lado del servidor. Pensé en un método de compromiso para lograrlo durante el fin de semana.
En primer lugar, deberíamos poder aclarar por qué usamos Page.Write para enviar el método JS personalizado a la página y por qué IE no puede reconocerlo y aparecerá el error "XXX no está definido". La razón es simple, porque el script que generamos usando Page.Write aparece en la parte superior de la página. Cuando IE lee que es una función de JavaScript, comienza a ejecutarla. Sin embargo, IE no lee el archivo js al que nos vinculamos en este momento, por lo que IE no puede reconocer el método que definimos en el archivo js. Entonces, ¿por qué es posible la alerta de escritura? Debido a que la alerta es una función de secuencia de comandos integrada en IE, IE la reconocerá independientemente de si hay una página o no.
Una vez que encuentre el problema, naturalmente se resolverá:
1. Integre nuestro método personalizado en IE. ---> Parece un poco caprichoso, jaja
2. Espere hasta que se cargue la página antes de activar el evento. --->Evento desencadenante, sí.
¿Cómo saber si la página ha terminado de cargarse?
1. A través del estado del documento
2. Activado por el evento (windows.onload)
El primero parece ser menos seguro. A veces todavía muestra que está transmitiendo datos aunque se haya cargado por completo (FF es la situación más obvia), por lo que es más seguro usar eventos.
Defina un método simple, móntelo en windows.onload y haga una marca al ejecutar
var cargaCompleta = falso;
función CargaCompletada()
{
cargarComplete= verdadero;
}
window.attachEvent("onload",LoadCompleted);
Jaja, de esta manera solo necesitamos juzgar si la página está cargada juzgando loadComplete.
var mImgdir = "";
var mCaption = "título";
var mMsg = "Mensaje";
var mOkClick= nulo;
función MostrarMensaje(imgdir,caption,msg,OkClick)
{
si (carga completa)
{
KMessageBox.ShowInfo(mImgdir,mCaption,mMsg,mOkClick);
}
}
De esta manera, cuando loadComplete no es falso, no ejecutaremos el método KMessageBox.ShowInfo(), pero no aparecerá ningún mensaje de error JS.
Esto por sí solo no es suficiente, porque IE solo ejecuta el script de salida una vez al generar la página, pero loadComplete = false en este momento, por lo que debemos detectar periódicamente si la página se ha cargado. Cuando se trata de tiempo, solo usamos setTimeout y setInterval. Aquí necesitamos una detección constante, por lo que usamos el método setInterval. El código final es el siguiente:
var cargaCompleta = falso;
var mImgdir = "";
var mCaption = "título";
var mMsg = "Mensaje";
var mOkClick= nulo;
var ID del temporizador;
función MostrarMensaje(imgdir,caption,msg,OkClick)
{
si (carga completa)
{
KMessageBox.ShowInfo(mImgdir,mCaption,mMsg,mOkClick);
//Descargar este evento window.detachEvent("onload",function(){LoadCompleted;}); //Detener la activación del tiempo
ventana.clearInterval(ID del temporizador);
}
}
función LoadCompleted() { loadComplete=true }
window.attachEvent("onload",LoadCompleted);
//Establece el mecanismo de detección de tiempo.
timerID = ventana.setInterval(ShowMessage,1);
Por supuesto, el código anterior solo es compatible con IE porque usa adjuntoEvent y detachEvent. En cuanto a hacerlo compatible con otros navegadores, consulte [JavaScript] Personalización del método de visualización de títulos para conocer el método de tratamiento:
if(!document.attachEvent)//No IE
{
document.attachEvent = function(){document.addEventListener(argumentos[0].substr(2),argumentos[1],argumentos[2])}
}
if(!window.attachEvent)//No IE
{
window.attachEvent = function(){window.addEventListener(argumentos[0].substr(2),argumentos[1],argumentos[2])}
}
En el lado del servidor, siempre que StringBuilder produzca el script anterior y luego lo escriba, es suficiente. Lo anterior solo proporciona una idea. Por supuesto, hay otras formas. Por ejemplo, no uso la detección programada, lo monto directamente en Windows.onload y dejo que la página monitoree y ejecute automáticamente. :), como dice el refrán Todos los caminos llevan a Roma~~~~~.
Las ideas anteriores provienen de yui, yui implementa un cuadro de mensaje personalizado más hermoso. Los amigos que estén interesados pueden estudiarlo juntos.
http://www.cnblogs.com/walkingboy/archive/2006/08/28/autorun_customerfunction.html