2009-05-11 2 views
6

클라이언트 프로젝트에서 작업 중이고 일부 핵심 자바 스크립트 파일을 포함하는 머리글과 바닥 글을 포함해야합니다. 페이지에 두 개의 PNG가 있지만 핵심 JS 파일이 잘못 코딩되어 있고 .png 파일이 포함 된 IMG 태그를 AlphaImageLoader 필터를 사용하는 DIVS로 바꾸기 전에 IE 7을 확인하지 않습니다. 결과는 IE 7에서 모든 .png 이미지가 기본 디스플레이 : 블록을 가진 DIV 태그로 대체되어 내 페이지의 모든 단일 PNG 이미지 이후에 줄 바꿈이 발생합니다.Javascript - 실행을 무효화 또는 방지

필자가 원하는 것은 더 나은 함수로 함수를 재정의하거나 함수를 실행하지 못하도록 방지하지만 js 파일 자체를 수정할 수는 없습니다. 함수 자체를 정의하고이를 창 onload 이벤트에 연결합니다. 여러 위치 (머리글, 전에/body 태그, $ (document) .ready, 등 ...)에서 같은 이름으로 함수를 재정의했습니다 있지만 원래 함수는 항상 실행되는 것으로 보인다 아마도 원래 함수 코드는 이벤트 핸들러에 저장되는 것으로, 함수에 대한 포인터가 아닙니다.

어떤 방법으로 고칠 수 있습니까? 선택적으로 onload 이벤트 핸들러를 제거 할 수 있습니까? 즉 부하에서 실행하는 유일한 있다면

+0

이벤트 리스너 또는 window.onload를 통해 할당하고 있습니까? –

+0

무시하려는 JS 파일에 jQuery가 사용됩니까? 이것이 맞는 경우 해결책이 있다고 생각합니다. –

+1

JS를 살펴보고 바인딩 된 방법을 확인할 수 있습니까? 그것은 중요. –

답변

1

는, 나는 당신이 그들을 다시 연결해야 할 것 같아요, 실행중인 다른 일이 있다면 당신은

window.onload = null; 

을 할 수 있다고 생각. 그것은 약간 연약하다, 나는 가정한다.

+0

그래, 문제는 다른 어떤 것이 첨부되고 있는지 모르기 때문에 어떤 보장도 할 수 없다는 것입니다. – Chris

+0

첨부 된 모든 이벤트를 열거 할 수 있습니까? – Chris

+0

@Chris : 아니요. – AnthonyWJones

0

머리글 & 꼬리말 사이의 큰 IFRAME이 트릭을 수행해야합니다. JQuery와이에 있기 때문에

(FN)가 부착 된 기능입니다
window.detachEvent("load", fn) 

은, 그러나 그것은 실제 기능의 무리한 요구 받고 보류 될 수있다 혼합 -이 :

1

IE7에서 당신은 detachEvent 방법을 사용할 수 있습니다 첨부되었습니다. 대부분의 경우 연결된 실제 함수는 익명입니다.

+0

'load'를 사용하면 오류가 발생했지만 'onload'는 오류를 발생시키지 않습니다. 그러나 실행이 중지되지 않았습니다. – Chris

+0

@Chris :이 경우 IE가 "on"접두어를 사용하는지 여부를 기억할 수 없습니다. 해당 함수가 이벤트에 첨부 된 다른 함수에 의해 호출되거나 onload 속성에 직접 할당 된 함수에 의해 호출되기 때문에 작동하지 않는 이유가됩니다. – AnthonyWJones

+0

약간의 코드 또는 이벤트를 추가하여 질문에 대해 수행하려는 작업을 조금이라도 설명하면 도움이 될 수 있습니다. – AnthonyWJones

0

글쎄, 그것은 결합 방법에 따라, 당신은 같은 것을 멀리 얻을 수 있습니다 분명히

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

, 당신은 경고가 아닌 다른 무언가를 재정의 할 것,하지만 작동 할 수 있습니다.

+0

Nope, 작동하지 않았습니다. – Chris

0

어쩌면 그게 전부라면 역순으로 모든 PNG 이미지를 찾고 div를 제거 할 수 있습니다. 특정 이미지를 건너 뛰고 싶다면 치료하려는 사람에게 속성을 삽입 할 수 있습니다. 다른

또 다른 방법은 이미지 파일 이름의 PNG로 일부를 필요가 없으므로 기능을 속여, 그리고 부하에 (자신의 온로드 후)

을 .PNG를 추가 또는 어쩌면 당신이 당신의 PNG 이미지를 교체 할 수 있습니다 다른 태그 및 대체하십시오 onload

그런데, 만약 당신이 방금 경고하는 경우, 당신은 onload 안에 정확히 뭐지 알 수 있습니다 ndow.onload, 그 기능 이외에 아무것도 없다면, window.onload = null;

+0

그냥, 문제가있는 IE 7에서 window.onload를 null로 설정하면 작동하지 않습니다. 할당 된 이벤트 핸들러는 여전히 실행됩니다. – Chris

+0

어떨까요 window.onload = function() {}; 그것이 함수를 막지 않으면 onload가 아닌 document.body.onload를 수정해야하며 빈 이미지와 같은 특정 요소가로드 될 수도 있습니다. – Ayyash

0

$(window).unbind("load")을 사용해 보셨나요?

0

PNG 이미지를 대체하는 함수의 이름을 알고 계십니까?그렇다면 다음과 같이 기존 함수를 재정의 할 수 있습니다.

// 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(); 
}); 
관련 문제