2009-05-11 14 views
6

私はクライアントプロジェクトで作業しています。ヘッダーとフッターにコアのJavaScriptファイルが含まれていなければなりません。私はページにいくつかのPNGを持っていますが、コアのJSファイルはあまりコード化されておらず、.pngファイルを含むIMGタグをAlphaImageLoaderフィルタを使用するDIVSに置き換える前にIE 7をチェックしません。その結果、IE 7では、すべての.pngイメージが、デフォルトの表示:ブロックを持つDIVタグに置き換えられ、ページ内のすべての単一のpngイメージの後に改行が生じます。Javascript - オーバーライドまたは実行を防ぐ

私がしたいのは、より良い機能を無効にするか、何らかの理由で実行を妨げることですが、関数を定義してウィンドウのonloadイベントに接続するjsファイル自体は変更できません。私は、いくつかの場所(ヘッダー、/ 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がこの場合「接頭辞」接頭辞を使用するかどうかはわかりませんでした。問題になっている関数が、イベントにアタッチされている別の関数によって呼び出されているか、onloadプロパティに直接代入されている関数によって呼び出されているためです。 – AnthonyWJones

+0

質問に何をしようとしているのか少しのコードやイベントを追加すると役立ちます。 – AnthonyWJones

0
まあ

、それがバインドされた方法に応じて、次のようなもので逃げることができるかもしれません:

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

、アラート以外のものを再定義したいと思いますが、それはうまくいくかもしれません。

+0

いいえ、うまくいきませんでした – Chris

0

多分それがそうであれば、それを逆にする関数を書いて、すべてのpng画像を探してdivを取り除くことができます。また、特定の画像をスキップしたい場合は、異なっ

別の方法は、画像のファイル名のPNG形式の部分を持っていないことで機能をだましている、と負荷に、(彼らのonloadイベント後)

を.PNGを追加または多分あなたとあなたのPNG画像を置き換えることができます別のタグ、および置き換えonload

ちょうどあなたが警告する場合、onloadの中に何を正確に知ることができますndow.onload、その機能以外に何もない場合は、window.onload = nullを設定します。

+0

ちょっと参考に、window.onloadをnullに設定することは、少なくとも問題があるIE 7では機能しません。割り当てられたイベントハンドラはまだ起動します。 – Chris

+0

何についてwindow.onload = function(){}; それが機能を妨げないなら、そのonloadではなく、おそらくそのdocument.body.onloadを修正する必要があります。また、空のイメージのような特定の要素の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(); 
}); 
関連する問題