2009-05-11 17 views
6

Estoy trabajando en un proyecto de cliente y tengo que incluir su encabezado y pie de página, que incluye algunos archivos javascript principales. Tengo un par de PNG en la página, pero su archivo JS básico está mal codificado y no busca IE 7 antes de intentar reemplazar las etiquetas IMG que contienen archivos .png con DIVS que usan el filtro AlphaImageLoader. El resultado es que en IE 7, todas mis imágenes .png son reemplazadas con etiquetas DIV que tienen una pantalla predeterminada: bloque, causando un salto de línea después de cada imagen png en mis páginas.Javascript: anula o evita la ejecución

Lo que me gustaría hacer es anular su función con una mejor o impedir que se ejecuten, pero no puedo modificar el archivo js, ​​que define la función y la asocia al evento onload de la ventana. He intentado redefinir la función con el mismo nombre en varios lugares (encabezado, justo antes de/body tag, en $ (documento) .ready, etc ...) pero la función original siempre parece ejecutarse, presumiblemente porque el original código de función es lo que se almacena con el controlador de eventos, y no simplemente un puntero a la función.

¿Alguna manera que pueda arreglar? ¿Hay alguna manera de eliminar selectivamente los controladores de eventos de carga?

+0

¿Lo están asignando con un detector de eventos, o simplemente a través de window.onload? –

+0

¿El archivo JS que intentas anular usa jQuery? Creo que hay una solución si este es el caso –

+1

¿Puedes mirar dentro del JS y ver cómo estaba atado? Importa. –

Respuesta

1

Si eso es lo único que funciona a la carga, lo que se podría hacer

window.onload = null; 

Si hay otras cosas que funcionan, supongo que tendría que vuelva a sujetarlas. Es un poco frágil, supongo.

+0

Sí, el problema es que no sé qué más se adjunta y no puedo ofrecer ninguna garantía. – Chris

+0

¿Hay alguna forma de enumerar todos los eventos adjuntos? – Chris

+0

@Chris: No, no hay – AnthonyWJones

0

Un IFRAME grande entre el encabezado & footer debería hacer el truco.

1

En Internet Explorer 7 se puede utilizar el método detachEvent: -

window.detachEvent("load", fn) 

donde fn es la función que se adjunta, sin embargo, ya que hay jQuery en esta mezcla puede ser una tarea difícil conseguir controlar la función real eso fue adjuntado Lo más probable es que la función real adjunta sea anónima.

+0

usando 'carga' arrojó un error, pero 'onload' no lo hizo. Sin embargo, ninguno detuvo la ejecución de la función. – Chris

+0

@Chris: No recuerdo si IE usa el prefijo "on" en este caso. La razón por la que no funciona será porque la función en cuestión es invocada por otra función que está asociada al evento o llamada por una función asignada directamente a la propiedad onload. – AnthonyWJones

+0

Podría ser útil si agrega un poco de código o evento, una pequeña reproducción de lo que intenta hacer con la pregunta. – AnthonyWJones

0

Bueno, dependiendo de lo que estaba obligado, que podría ser capaz de salirse con algo como:

window.onload = function(){ 
    var alert=function(a){ 
    console.log(a); 
    } 
    window.onload(); 
} 

Obviamente, usted desea volver a definir algo distinto de alerta, pero que podría funcionar.

+0

No, no funcionó – Chris

0

quizás si eso es todo lo que hace, puede escribir una función para invertirlo, buscar todas las imágenes png y quitar el div, y si desea omitir ciertas imágenes puede implantar un atributo para aquellos que desea tratar diferente

otra manera es engañar a la función por no tener la parte png del nombre de archivo de imagen y de la carga, añadir los .png (después de su proceso de carga)

o tal vez usted puede reemplazar sus imágenes PNG con otra etiqueta, y reemplazar onload

por cierto, usted puede saber exactamente qué hay dentro de la carga, si solo alerta wi ndow.onload, si no hay nada más que esa funcionalidad, configure window.onload = null;

+0

Solo para FYI, configurar window.onload a null no funciona, al menos para IE 7, que es el problema. Los controladores de eventos asignados aún se activan. – Chris

+0

qué tal window.onload = function() {}; si eso no previene la función, entonces no se carga, debe arreglar, tal vez su document.body.onload, y también puede estar cargando un elemento específico, como una imagen vacía ... – Ayyash

0

¿Has probado a usar $(window).unbind("load")?

0

¿Conoce el nombre de la función que reemplaza las imágenes PNG?Si es así, es posible que pueda anular la función existente haciendo algo como esto:

// Assuming PNG function is called pngSwap 
function pngSwap() { 
    alert('png swap');    
} 

$(document).ready(function() { 
    if (window.pngSwap && window.pngSwap.constructor === Function) { 
     var oldFunc = window.pngSwap; 
     window.pngSwap = function() { 
      alert('new png swap'); 
     } 
    } 

    pngSwap(); 
}); 
Cuestiones relacionadas