javascript - आईई में डेवलपर टूल्स खोलने के बाद जावास्क्रिप्ट केवल एक बार क्यों काम करता है?




internet-explorer internet-explorer-9 (8)

इससे मेरी समस्या हल हो गई जब मैंने इसमें मामूली बदलाव किया। आईई 9 समस्या को ठीक करने के लिए मैंने अपने एचटीएमएल पेज में निम्नलिखित जोड़ा:

<script type="text/javascript">
    // IE9 fix
    if(!window.console) {
        var console = {
            log : function(){},
            warn : function(){},
            error : function(){},
            time : function(){},
            timeEnd : function(){}
        }
    }
</script>

आईई 9 बग - जावास्क्रिप्ट केवल एक बार डेवलपर टूल्स खोलने के बाद काम करता है।

हमारी साइट उपयोगकर्ताओं को मुफ्त पीडीएफ डाउनलोड प्रदान करती है, और इसमें एक सरल "डाउनलोड करने के लिए पासवर्ड दर्ज करें" फ़ंक्शन है। हालांकि, यह इंटरनेट एक्सप्लोरर में बिल्कुल भी काम नहीं करता है।

आप इस example में अपने लिए देख सकते हैं।

डाउनलोड पास "makeuseof" है। किसी अन्य ब्राउज़र में, यह ठीक काम करता है। आईई में, दोनों बटन कुछ भी नहीं करते हैं।

मुझे मिली सबसे उत्सुक बात यह है कि यदि आप एफ 12 के साथ डेवलपर टूलबार खोलते और बंद करते हैं, तो यह सब अचानक काम करना शुरू कर देता है।

हमने संगतता मोड की कोशिश की है और इस तरह, कुछ भी कोई फर्क नहीं पड़ता है।

मैं इंटरनेट एक्सप्लोरर में यह काम कैसे करूं?


ऐसा लगता है कि आपके जावास्क्रिप्ट में कुछ डिबगिंग कोड हो सकता है।

जो अनुभव आप वर्णन कर रहे हैं वह कोड का सामान्य है जिसमें console.log() या अन्य console कार्यक्षमता शामिल है।

console ऑब्जेक्ट केवल तब सक्रिय होता है जब देव टूलबार खोला जाता है। इससे पहले, कंसोल ऑब्जेक्ट को कॉल करने के परिणामस्वरूप इसे undefined बताया जाएगा। टूलबार खोले जाने के बाद, कंसोल मौजूद होगा (भले ही टूलबार बाद में बंद हो), इसलिए आपके कंसोल कॉल तब काम करेंगे।

इसके कुछ समाधान हैं:

console संदर्भों को हटाने के लिए आपके कोड को सबसे स्पष्ट रूप से जाना console । आपको वैसे भी उत्पादन कोड में सामान छोड़ना नहीं चाहिए।

यदि आप कंसोल संदर्भ रखना चाहते हैं, तो आप उन्हें if() कथन, या कुछ अन्य सशर्त में लपेट सकते हैं जो जांचता है कि कॉल करने का प्रयास करने से पहले कंसोल ऑब्जेक्ट मौजूद है या नहीं।


मुझे लगता है कि यह जावास्क्रिप्ट के किसी भी टैग से पहले इसे जोड़ने में मदद कर सकता है:

try{
  console
}catch(e){
   console={}; console.log = function(){};
}

मैंने अपने मुद्दे के लिए संकल्प और ठीक किया। ऐसा लगता है कि मैंने अपने जावास्क्रिप्ट के अंदर डाल दिया AJAX अनुरोध प्रसंस्करण नहीं कर रहा था क्योंकि मेरे पृष्ठ में कुछ कैश समस्या थी। यदि आपकी साइट या पेज में कैशिंग समस्या है तो आपको डेवलपर्स / एफ 12 मोड में उस समस्या को नहीं दिखाई देगा। मेरे कैश किए गए जावास्क्रिप्ट AJAX अनुरोधों से यह अपेक्षा के अनुसार काम नहीं कर सकता है और निष्पादन को तोड़ने का कारण बनता है जिसे F12 में कोई समस्या नहीं है। तो कैश झूठी बनाने के लिए बस नया पैरामीटर जोड़ा गया।

$.ajax({
               cache: false,
});

ऐसा लगता है कि आईई को विशेष रूप से झूठी होने की आवश्यकता है ताकि AJAX और जावास्क्रिप्ट गतिविधि अच्छी तरह से चल सके।


यदि आप AngularJS संस्करण 1.X का उपयोग कर रहे हैं तो आप सीधे console.log का उपयोग करने के बजाय $ लॉग सेवा का उपयोग कर सकते हैं।

लॉगिंग के लिए सरल सेवा। डिफ़ॉल्ट कार्यान्वयन सुरक्षित रूप से ब्राउज़र के कंसोल (यदि मौजूद है) में संदेश लिखता है।

https://docs.angularjs.org/api/ng/service/$log

तो अगर आपके पास कुछ समान है

angular.module('logExample', [])
  .controller('LogController', ['$scope', function($scope) {
    console.log('Hello World!');
 }]);

आप इसे बदल सकते हैं

angular.module('logExample', [])
  .controller('LogController', ['$scope', '$log', function($scope, $log) {
    $log.log('Hello World!');
 }]);

कोणीय 2+ में कोई अंतर्निहित लॉग सेवा नहीं है


यह मेरे लिए आईई 11 में हुआ था। और मैं jquery .load फ़ंक्शन को कॉल कर रहा था। तो मैंने इसे पुराने फैशन तरीके से किया और कैशिंग को अक्षम करने के लिए यूआरएल में कुछ डाल दिया।

$("#divToReplaceHtml").load('@Url.Action("Action", "Controller")/' + @Model.ID + "?nocache=" + new Date().getTime());

हमने विंडोज 7 और विंडोज 10 पर आईई 11 पर इस समस्या में भाग लिया। हमने पाया कि आईई (आईई> इंटरनेट विकल्प> उन्नत टैब> ब्राउज़िंग> अनचेक स्क्रिप्ट डिबगिंग अक्षम करें (इंटरनेट एक्सप्लोरर) के लिए डीबगिंग क्षमताओं को चालू करके वास्तव में समस्या क्या थी। यह सुविधा आमतौर पर डोमेन व्यवस्थापक द्वारा हमारे पर्यावरण के भीतर जांच की जाती है।

समस्या इसलिए थी क्योंकि हम अपने जावास्क्रिप्ट कोड में console.debug(...) विधि का उपयोग कर रहे थे। डेवलपर (मुझे) द्वारा धारणा की गई थी, अगर क्लाइंट डेवलपर टूल्स कंसोल स्पष्ट रूप से खुला नहीं था तो मुझे कुछ भी नहीं लिखा था। जबकि क्रोम और फ़ायरफ़ॉक्स इस रणनीति से सहमत थे, आईई 11 इसे थोड़ा पसंद नहीं आया। console.debug(...) कथन में सभी console.debug(...) कथन को बदलकर, हम क्लाइंट कंसोल में अतिरिक्त जानकारी लॉग इन करना जारी रखते थे और इसे खोलते समय देखते थे, लेकिन अन्यथा इसे छिपाते रहें ठेठ उपयोगकर्ता से।


एचटीएमएल 5 Boilerplate कंसोल समस्याओं को ठीक करने के लिए एक अच्छा पूर्व निर्मित कोड है:

// Avoid `console` errors in browsers that lack a console.
(function() {
    var method;
    var noop = function () {};
    var methods = [
        'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
        'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
        'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
        'timeStamp', 'trace', 'warn'
    ];
    var length = methods.length;
    var console = (window.console = window.console || {});

    while (length--) {
        method = methods[length];

        // Only stub undefined methods.
        if (!console[method]) {
            console[method] = noop;
        }
    }
}());

टिप्पणियों में @ प्लस-पॉइंट के रूप में, नवीनतम संस्करण उनके गिटहब पेज पर उपलब्ध है





internet-explorer-9