2009-05-11 15 views
6

मैं एक ग्राहक परियोजना पर काम कर रहा हूँ रोकने के लिए और मैं उनके शीर्ष लेख और पाद है, जो कुछ कोर जावास्क्रिप्ट फ़ाइलें शामिल शामिल करने के लिए की है। मेरे पास पृष्ठ पर कुछ पीएनजी हैं, लेकिन उनकी मूल जेएस फ़ाइल खराब कोडित है और आईएमजी टैग को प्रतिस्थापित करने का प्रयास करने से पहले IE 7 की जांच नहीं करती है जिसमें DIVS वाली .png फ़ाइलें होती हैं जो AlphaImageLoader फ़िल्टर का उपयोग करती हैं। नतीजा यह है कि आईई 7 में, मेरी सभी .png छवियों को डीआईवी टैग के साथ प्रतिस्थापित किया गया है जिनमें डिफ़ॉल्ट डिस्प्ले होता है: ब्लॉक, जो मेरे पृष्ठों में प्रत्येक पीएनजी छवि के बाद एक लाइनब्रेक उत्पन्न करता है।जावास्क्रिप्ट - ओवरराइड या निष्पादन

मैं जो करना चाहता हूं वह अपने काम को बेहतर तरीके से ओवरराइड कर रहा है या किसी भी तरह से उन्हें निष्पादित करने से रोकता है, लेकिन मैं जेएस फ़ाइल को स्वयं संशोधित नहीं कर सकता, जो दोनों फ़ंक्शन को परिभाषित करता है और विंडो ऑनलोड ईवेंट से जोड़ता है। मैंने कई स्थानों (हेडर,/बॉडी टैग से पहले, $ (दस्तावेज़) .ready, आदि में उसी नाम के तहत फ़ंक्शन को फिर से परिभाषित करने का प्रयास किया है ...) लेकिन मूल फ़ंक्शन हमेशा निष्पादित प्रतीत होता है, संभवतः मूल फंक्शन कोड इवेंट हैंडलर के साथ संग्रहीत किया जाता है, न केवल फ़ंक्शन के लिए एक सूचक।

कोई भी तरीका मैं ठीक कर सकता हूं? क्या अधिभार ईवेंट हैंडलर को चुनने का कोई तरीका है?

+0

वे एक घटना श्रोता के साथ बताए जाते हैं, या बस window.onload के माध्यम से: आप कुछ इस तरह करने से मौजूदा समारोह ओवरराइड करने के लिए सक्षम हो सकता है यदि ऐसा है तो? –

+0

क्या जेएस फ़ाइल आप jQuery का उपयोग ओवरराइड करने की कोशिश कर रहे हैं? मुझे लगता है कि अगर कोई समस्या है तो –

+1

क्या आप जेएस के अंदर देख सकते हैं और देख सकते हैं कि यह कैसा था? यह मायने रखता है। –

उत्तर

1

हैं कि केवल लोड पर चल बात है, मैं, लगता है कि तुम कर सकते हो

window.onload = null; 

वहाँ चल रहे अन्य बातों के कर रहे हैं मुझे लगता है कि आप उन्हें पुनः अनुलग्न करना होगा। यह थोड़ा नाजुक है, मुझे लगता है।

+0

का उपयोग करके बाध्य था हाँ समस्या यह है कि मुझे नहीं पता कि और क्या जुड़ा जा रहा है, और कोई गारंटी नहीं दे सकता है। – Chris

+0

क्या सभी संलग्न घटनाओं को गिनने का कोई तरीका है? – Chris

+0

@ क्रिस: नहीं – AnthonyWJones

0

हैडर & पाद लेख के बीच एक बड़ा IFRAME चाल करना चाहिए।

window.detachEvent("load", fn) 

जहां fn समारोह है कि संलग्न किया गया था, हालांकि मिश्रण यह वास्तविक समारोह का एक लंबा आदेश हो रही पकड़ हो सकता है, क्योंकि इस में jQuery है -:

1

IE7 में आप detachEvent विधि का उपयोग कर सकते हैं वह जुड़ा हुआ था। सबसे अधिक संभावना है कि संलग्न वास्तविक कार्य गुमनाम होगा।

+0

'लोड' का उपयोग करके एक त्रुटि फेंक दी, लेकिन 'ऑनलोड' नहीं हुआ। हालांकि, समारोह को निष्पादित करने से रोक दिया गया है। – Chris

+0

@ क्रिस: मुझे याद नहीं आया कि आईई इस मामले में "चालू" उपसर्ग का उपयोग करता है या नहीं। इसका काम करने का कारण यह नहीं होगा क्योंकि प्रश्न में कार्य को या तो किसी अन्य फ़ंक्शन द्वारा बुलाया जाता है जो ईवेंट से जुड़ा होता है या सीधे अधिभार संपत्ति को निर्दिष्ट फ़ंक्शन द्वारा कॉल किया जाता है। – AnthonyWJones

+0

यदि आप थोड़ा सा कोड या घटना जोड़ते हैं तो यह मदद कर सकता है कि आप इस सवाल पर क्या करने की कोशिश कर रहे हैं उसका एक छोटा सा प्रतिनिधि। – AnthonyWJones

0

खैर, यह कैसे ही था पर निर्भर करता है, आप की तरह कुछ के साथ भाग प्राप्त करने में सक्षम हो सकता है:

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

जाहिर है, जब आप सूचना के अलावा कुछ को फिर से परिभाषित करना चाहते हैं, लेकिन वह काम कर सकते हैं।

+0

नहीं, – Chris

0

शायद यह सब कुछ करता है, तो आप इसे वापस करने के लिए एक फ़ंक्शन लिख सकते हैं, सभी पीएनजी छवियों को ढूंढ सकते हैं और div को हटा सकते हैं, और यदि आप कुछ छवियों को छोड़ना चाहते हैं तो आप उन लोगों को एक विशेषता लागू कर सकते हैं जिन्हें आप इलाज करना चाहते हैं अलग ढंग से

एक और तरीका छवि फ़ाइल नाम के png हिस्सा नहीं होने से समारोह को ठगने के लिए है, और लोड पर, .png

संलग्न (उनके ऑनलोड के बाद) या हो सकता है आप के साथ अपने PNG छवियों की जगह ले सकता एक और टैग, और जिस तरह से बदलने के ऑनलोड

, आप पता कर सकते हैं वास्तव में ऑनलोड अंदर क्या है, अगर आप सिर्फ चेतावनी वाई ndow.onload, अगर उस कार्यक्षमता के अलावा कुछ भी नहीं है, तो window.onload = null सेट करें;

+0

काम नहीं किया, बस FYI, विंडो सेट करना। शून्य पर लोड करना कम से कम आईई 7 के लिए काम नहीं करता है, जो समस्या का मामला है। असाइन किए गए ईवेंट हैंडलर अभी भी आग लगते हैं। – Chris

+0

window.onload = function() {} के बारे में क्या; यदि यह फ़ंक्शन को रोकता नहीं है, तो यह अधिभार नहीं है, आपको इसे ठीक करना चाहिए, शायद उसका दस्तावेज़.body.onload, और यह एक विशिष्ट तत्व की एक अधिभार भी हो सकता है, जैसे खाली छवि ... – Ayyash

0

क्या आपने $(window).unbind("load") का उपयोग करने का प्रयास किया है?

0

क्या आप उस समारोह का नाम जानते हैं जो पीएनजी छवियों को प्रतिस्थापित करता है?

// 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(); 
}); 
संबंधित मुद्दे