IE

2011-03-02 26 views
7

में जावास्क्रिप्ट लंबे चलने वाली चेतावनी संवाद को बाईपास करना मुझे अपने पृष्ठ पर एक सुपर लम्बी जावास्क्रिप्ट चलाने की आवश्यकता है। ग्राहक शिकायत कर रहा है कि आईई स्क्रिप्ट के लिए एक चेतावनी संवाद दिखाता है। दुर्भाग्यवश, स्क्रिप्ट की लंबाई को कम करने का कोई तरीका नहीं है, इसलिए मैं समस्या के लिए बाईपास ढूंढने की कोशिश कर रहा हूं।IE

Microsoft support website के अनुसार:

आईई निष्पादित स्क्रिप्ट बयान की कुल संख्या ट्रैक करता है और मूल्य हर बार एक नई स्क्रिप्ट निष्पादन इस तरह के एक समय समाप्ति से रूप में या एक ईवेंट हैंडलर प्रारंभ हुआ है, रीसेट करता है। यह "लंबे समय से चलने वाली स्क्रिप्ट" संवाद बॉक्स प्रदर्शित करता है जब वह मान सीमा सीमा से अधिक है।

हालांकि मैंने अपनी स्क्रिप्ट को टुकड़ों में तोड़ने के लिए setInterval() और setTimeout() दोनों का उपयोग करने का प्रयास किया है, लेकिन कोई भी काम नहीं कर रहा है। मैं जिस ब्राउज़र का उपयोग कर रहा हूं वह आईई 8 है।

<html> 
<head> 
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.min.js"></script> 
</head> 
<body> 
    <div id ="test"></div> 
    <div id ="log"></div> 
</body> 
<script> 
    var repeat =0; 

    function heavyTask(){ 
     if (repeat<50){ 
      y = longRun(); 
      setTimeout("heavyTask()",100); 
     }else{ 
      $('#test').html("done!"); 
     } 
    } 
    function longRun(){ 
     for(var i =0; i<20000;i++){ } 
     repeat++; 
     $('#log').append('<div>repeat: '+ repeat +'</div>'); 
    }; 

    $(document).ready(function() { 
     setTimeout("heavyTask()",100); 
    }); 
</script></html> 

आदेश कोड काम करने के लिए, आप रजिस्ट्री को संपादित करने, HKEY_CURRENT_USER \ Software \ Microsoft \ इंटरनेट एक्सप्लोरर \ शैलियाँ पर जाएँ, और सेट "MaxScriptStatements" कहा जाता DWORD मान है: मेरी कोड निम्नलिखित के रूप में है 100,000 तक यदि शैलियाँ कुंजी मौजूद नहीं है, तो एक नई कुंजी बनाएं जिसे स्टाइल कहा जाता है।

धन्यवाद,

+0

वहाँ कहीं में एक प्रश्न है? –

+0

@Marc आपकी त्वरित प्रतिक्रिया के लिए धन्यवाद। मैंने पहले इसकी खोज की है लेकिन मुझे कोई व्यवहार्य समाधान नहीं मिला। असल में मुझे लगता है कि कोई समाधान नहीं हो सकता है। मैं बस अपने मालिक को यह सुनिश्चित करना और रिपोर्ट करना चाहता हूं। ;) –

उत्तर

6

इस संसाधन सीमा ब्राउज़र, नहीं जावास्क्रिप्ट द्वारा निर्धारित है।

आप अपनी प्रक्रिया को छोटे चरणों में विभाजित कर सकते हैं।

इस सवाल देखें: How can I give control back (briefly) to the browser during intensive JavaScript processing?

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। दरअसल, आपका सुझाव वह है जो मैं करने की कोशिश कर रहा हूं। मुझे नहीं पता कि यह क्यों काम नहीं कर रहा है। मेरी पोस्ट में कोड प्रक्रिया को छोटे चरणों में तोड़ देता है, लेकिन ऐसा लगता है कि आईई टाइमआउट के बावजूद कुल # स्टेटमेंट्स को ट्रैक करता है। :( –

+1

हाँ, आप जो कर रहे हैं वह समझ में आता है। मैं अब सुझाव दे सकता हूं कि अब टाइमआउट बढ़ रहा है प्रक्रिया को पुनरारंभ करना। –

+1

धन्यवाद, यह समस्या है! अंतराल को 10 से 100 तक बढ़ाने के बाद, स्क्रिप्ट अब काम कर रही है। आईई को लंबी लिपि का पता लगाने के तरीके के बारे में ध्यान देने योग्य है। यह निर्धारित करने के लिए कुछ समय बाद "परिणाम खींचता है" बहुत सारे कथन पहले से ही निष्पादित किए गए हैं। इसलिए यह संभव है कि चेतावनी को देखे बिना मैक्सस्क्रिप्ट स्टेटमेंट्स को और अधिक चलाएं। यही कारण है कि मेरी परीक्षण स्क्रिप्ट असंगत अभिनय कर रही है। –

1

बस कुछ वाक्यविन्यास त्रुटियों ... http://jsfiddle.net/Detect/HnpCr/3/

+0

धन्यवाद, कोड बहुत बेहतर दिखता है ... हालांकि यह समस्या का समाधान नहीं करता है। यदि आप MaxScriptStatements को 100,000 पर सेट करते हैं और IE में स्क्रिप्ट चलाने की कोशिश करते हैं, तो भी आपको वही चेतावनी मिलती है। :( –

+0

क्या आपने सेटटाइमआउट अंतराल को बढ़ाने की कोशिश की है? – Detect

+0

धन्यवाद, जो समस्या हल करता है :) –