একবারে আইই-তে একবার বিকাশকারী সরঞ্জাম খোলার পরে কেন জাভাস্ক্রিপ্ট কাজ করবে?


638

আইই 9 বাগ - জাভাস্ক্রিপ্ট কেবল একবার বিকাশকারী সরঞ্জাম খোলার পরে কাজ করে।

আমাদের সাইট ব্যবহারকারীদের জন্য বিনামূল্যে পিডিএফ ডাউনলোড সরবরাহ করে এবং এতে একটি সাধারণ "ডাউনলোডের জন্য পাসওয়ার্ড প্রবেশ করুন" ফাংশন রয়েছে। তবে এটি ইন্টারনেট এক্সপ্লোরারে মোটেও কাজ করে না।

আপনি এই উদাহরণে নিজের জন্য দেখতে পারেন ।

ডাউনলোড পাস "মেকিউসফ"। অন্য যে কোনও ব্রাউজারে এটি কাজ করে। আইই, উভয় বোতাম কিছুই করে না।

সবচেয়ে কৌতূহলজনক বিষয় আমি খুঁজে পেয়েছি হ'ল আপনি যদি এফ 12 দিয়ে বিকাশকারী সরঞ্জামদণ্ডটি খুলেন এবং বন্ধ করেন তবে হঠাৎ এটি সমস্ত কাজ শুরু করে।

আমরা সামঞ্জস্যতা মোড চেষ্টা করেছি এবং এ জাতীয় কিছুতেই কোনও পার্থক্য হয় না।

কীভাবে আমি এই কাজটি ইন্টারনেট এক্সপ্লোরারে করব?


3
ক্রস ব্রাউজারের মোড়ক ব্যবহার করুন: github.com/MichaelZelensky/log.js
মাইকেল জেলেনস্কি

1
একটি ভাল বিকল্প, যদি আপনার কোনও বিল্ড স্টেপ থাকে তবে তা হ'ল কিছু ব্যবহার করা gulp-strip-debug। এটি সমস্ত console.*পদ্ধতি অপসারণ করে, উত্পাদন তৈরির জন্য দুর্দান্ত, বা আইই পরীক্ষায়।
জ্ঞানসিল্যা

15
ভবিষ্যতের গুগলারের জন্য: আমার একই লক্ষণ ছিল তবে আইই ১১-এ in ঠিক আছে, দেখা গেল যে উত্তরটি সম্পর্কিত নয় console, তবে আমার কৌণিক ব্যবহার এবং অনুরোধগুলি পাওয়ার ক্যাশে করা ছিল। আরও জন্য এখানে এবং এখানে উত্তর দেখুন।
ক্রিস্টোফার লেট

@ChristofferLette হ্যাঁ, আমি একই সমস্যা পরীক্ষা দয়া stackoverflow.com/questions/31428126/... কোড সঠিকভাবে কাজ করে ডেভেলপারদের সরঞ্জাম খোলা হয় ..
প্রনব Bilurkar

5
এই জাতীয় সমস্যা সম্পর্কে সবচেয়ে বিরক্তিকর জিনিস? তারা ডিবাগ করা প্রায় অসম্ভব কারণ আপনি বিকাশকারী কনসোলটি খোলার সাথে সাথে এটি কাজ শুরু করে।
jlewkovich

উত্তর:


815

দেখে মনে হচ্ছে আপনার জাভাস্ক্রিপ্টে আপনার কিছু ডিবাগিং কোড থাকতে পারে।

আপনি যে অভিজ্ঞতাটি বর্ণনা করছেন তা হ'ল কোডের মধ্যে আদর্শ যা console.log()অন্য কোনও consoleকার্যকারিতা রয়েছে।

consoleদেব টুলবারটি খোলার পরে কেবল অবজেক্টটি সক্রিয় হয়। তার আগে, কনসোল অবজেক্টে কল করার ফলে এটি হিসাবে রিপোর্ট করা হবে undefined। টুলবারটি খোলার পরে, কনসোলটি উপস্থিত থাকবে (এমনকি পরে সরঞ্জামদণ্ডটি বন্ধ থাকলেও), সুতরাং আপনার কনসোল কলগুলি কাজ করবে।

এর কয়েকটি সমাধান রয়েছে:

সর্বাধিক সুস্পষ্ট একটি হল আপনার কোডগুলি রেফারেন্সগুলি সরানোর মধ্য দিয়ে যাওয়া console। আপনার প্রডাকশন কোডে যাইহোক স্টাফ ছেড়ে যাওয়া উচিত নয়।

আপনি যদি কনসোলের রেফারেন্স রাখতে চান তবে আপনি সেগুলিকে একটি if()বিবৃতিতে বা অন্য কোনও শর্তসাপেক্ষে মোড়ানো করতে পারেন যা কল করার চেষ্টা করার আগে কনসোল অবজেক্টটি উপস্থিত কিনা তা পরীক্ষা করে।


8
ডিবাগিং কোড রেখে যাওয়ার জন্য কি কোনও কার্যকারিতা রয়েছে? আইই হ'ল এই
অনাহীন

94
if(!console) {console={}; console.log = function(){};}
মেকোহি

79
@ মেকোহি if(!console)একই ত্রুটির কারণ ঘটবে - এটি পড়তে হবেif(!window.console)
mindplay.dk

9
সুতরাং ... আইই এমন কোনও বৈশিষ্ট্য কার্যকর করা উচিত নয় যা প্রতিটি নতুন জেএস দেব সর্বদা ব্যবহার করে, এমন কিছু দেবকে বিরক্ত করা এড়ানোর জন্য যা স্ক্রিপ্ট ব্যবহার করে যে জিনিসটি প্রথম স্থানে কাজ করা উচিত ছিল তা ঠিক করার জন্য ... তবে এটি অন্যায্য এর জন্য আইই নক করতে? আপনি খুব উদার ব্যক্তি স্পুডলি !!! :)
জর্দান ডেভিস

7
এখনও আইই 11 এর সাথে ঘটে
মাইকেল

162

কনসোল সমস্যা ঠিক করার জন্য এইচটিএমএল 5 বয়লারপ্লেটে একটি সুন্দর প্রাক-তৈরি কোড রয়েছে:

// 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;
        }
    }
}());

@ প্লাস- মন্তব্যগুলিতে ইঙ্গিত হিসাবে, সর্বশেষতম সংস্করণটি তাদের গিটহাব পৃষ্ঠায় উপলভ্য


8
@ প্লাস 'মন্তব্যের লিঙ্কটি আর বৈধ নয়। কোডটি একটি srcসাব- ডিরের
ক্রিস্টোফার লেট

153

console.logসমস্যাটি ছাড়াও এখানে আরও একটি সম্ভাব্য কারণ রয়েছে (কমপক্ষে আইই ১১ এ):

যখন কনসোলটি খোলা থাকে না, আইই বেশ আক্রমণাত্মক ক্যাশে করে, তাই নিশ্চিত হয়ে নিন যে কোনও $.ajaxকল বা XMLHttpRequestকলগুলি ক্যাশেটি মিথ্যাতে সেট করেছে।

উদাহরণ স্বরূপ:

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

যখন বিকাশকারী কনসোল খোলা থাকে, তখন ক্যাচিং কম আক্রমণাত্মক হয়। একটি বাগ (বা সম্ভবত কোনও বৈশিষ্ট্য?) বলে মনে হচ্ছে


9
এটি কেবল আমাকে বাঁচিয়েছে;) ধন্যবাদ! আমি বলব এটি একটি ত্রুটিযুক্ত কারণ আপনার ওয়েবসাইটটি কনসোল খোলা এবং বন্ধ করে পরীক্ষা করতে এবং ডিবাগ করার জন্য একই শর্ত থাকা উচিত।
ছনচ

আমার জন্য কাজ করেছেন। বিশেষ করে: stackoverflow.com/questions/13391563/...
user1062589

2
এটি উচ্চতর হওয়া উচিত কারণ আমি মনে করি আসল উত্তর ... কোনও আইই সংস্করণে কনসোল.লগের জন্য গ্রহণযোগ্য উত্তর একটি ত্রুটি ছুঁড়ে দেবে, এখানে বর্ণিত আচরণের কারণ নয়।
মিগস

63

আমি এতে সামান্য পরিবর্তন করার পরে এটি আমার সমস্যার সমাধান করেছে। আইই 9 সমস্যাটি সমাধানের জন্য আমি আমার এইচটিএমএল পৃষ্ঠায় নিম্নলিখিতগুলি যুক্ত করেছি:

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

1
এই সমাধানটি উইন্ডোজ 7 64-বিটে আইই 11 এ কাজ করে না।
বিক্রম

1
এটি উইন্ডোজ 7 64-বিটে আইই 11 তে আমার সমস্যার সমাধান করেছে।
জোনিয়াং

29

consoleগৃহীত উত্তর এবং অন্যগুলিতে উল্লিখিত ' ' 'ব্যবহারের সমস্যা ছাড়াও, ইন্টারনেট এক্সপ্লোরারে পৃষ্ঠাগুলি কেবল বিকাশকারী সরঞ্জামগুলির সাথে সক্রিয় হওয়ার কমপক্ষে আরও একটি কারণ রয়েছে।

বিকাশকারী সরঞ্জামগুলি সক্ষম থাকলে, আইই প্রকৃতপক্ষে এটির এইচটিটিপি ক্যাশে (অন্তত আইই ১১ এ ডিফল্টরূপে) ব্যবহার করে না যেমন এটি সাধারণ মোডে করে।

এর অর্থ যদি আপনার সাইটের বা পৃষ্ঠায় ক্যাশে সমস্যা হয় (যদি এটি তার চেয়ে বেশি ক্যাশে করে তোলে উদাহরণস্বরূপ - এটি আমার ক্ষেত্রে ছিল), আপনি এফ 12 মোডে সমস্যাটি দেখতে পাবেন না। সুতরাং যদি জাভাস্ক্রিপ্টটি কিছু ক্যাজড এজেএক্স অনুরোধ করে, তবে তারা স্বাভাবিক মোডে প্রত্যাশার মতো কাজ না করে এবং এফ 12 মোডে সূক্ষ্মভাবে কাজ করতে পারে।


1
দেখুন stackoverflow.com/questions/3984961/... জন্য কীভাবে অক্ষম ক্যাশে xmlHttpReq অনুরোধ।
মাইকেল রস

1
মিষ্টি। এই আশ্চর্যজনকভাবে কাজ করে। আমি অনুমান করি যে কৌণিকের $ http পরিষেবাটি যেমন ভেবেছিল তেমন বস্ট ক্যাশে করে না।

17

আমি মনে করি এটি জাভাস্ক্রিপ্টের যে কোনও ট্যাগের আগে এটি যুক্ত করে সাহায্য করতে পারে:

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

11
try catchএকটি পরিবর্তনশীল বিদ্যমান তা সনাক্ত করা একটি খারাপ ধারণা। এটি কেবল ধীর নয়, আপনার চেষ্টা ব্লকে যদি আপনার একাধিক বক্তব্য থাকে তবে আপনি কোনও ভিন্ন কারণে ব্যতিক্রম পেতে পারেন। এটি খুব কম ব্যবহার করে ব্যবহার করবেন নাif (typeof console == 'undefined')
হুয়ান মেন্ডেস

8

আপনি যদি AngularJS সংস্করণ 1.x ব্যবহার করেন তবে আপনি সরাসরি কনসোল.লগ ব্যবহার না করে $ লগ ​​পরিষেবা ব্যবহার করতে পারেন।

লগিং জন্য সহজ পরিষেবা। ডিফল্ট বাস্তবায়ন ব্রাউজারের কনসোলে (উপস্থিত থাকলে) নিরাপদে বার্তাটি লিখে দেয়।

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+ এর কোনও বিল্ট-ইন লগ পরিষেবা নেই


এটি আমাকে সাহায্য করেছে, ধন্যবাদ- টাইপস্ক্রিপ্ট ব্যবহার করা অন্য কারোর জন্য, এটি কৌণিক সংজ্ঞাগুলিতে "আইলোগ সার্ভিস"
ড্যানিপপওয়েল

আইআইআরসি $ লগ ​​ব্যবহার করে লগ স্টেটমেন্টের অবস্থানকে অস্পষ্ট করে তোলে, কনসোল.লগ ব্যবহারের বিপরীতে unlike উন্নয়নের সময় আমার অভিজ্ঞতা থেকে এত দুর্দান্ত নয়।
জেসিডাহল

5

আপনি যদি ব্যবহার করছেন angularএবং যেমন 9, 10বা edgeব্যবহার করছেন:

myModule.config(['$httpProvider', function($httpProvider) {
    //initialize get if not there
    if (!$httpProvider.defaults.headers.get) {
        $httpProvider.defaults.headers.get = {};    
    }    

    // Answer edited to include suggestions from comments
    // because previous version of code introduced browser-related errors

    //disable IE ajax request caching
    $httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
    // extra
    $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
    $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
}]);

সম্পূর্ণ অক্ষম করা cache


4

এটা আমার জন্য আইই 11 এ হয়েছিল। এবং আমি jquery। লোড ফাংশন কল ছিল। সুতরাং আমি এটি পুরানো ফ্যাশন পদ্ধতিতে করেছি এবং ক্যাশে অক্ষম করার জন্য url এ কিছু রেখেছি।

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

2

আমি রান্কস এবং টোডট্রেড দ্বারা প্রদত্ত সমাধানগুলির জন্য আরও একটি বিকল্প পেয়েছি যা স্পডলির উত্তরের মন্তব্যে আলোচিত সমস্যাগুলি এড়িয়ে চলেছে :

        try {
            console.log(message);
        } catch (e) {
        }

এটি কিছুটা কুঁকড়ে থাকলেও অন্যদিকে এটি সংক্ষিপ্ত এবং রুকসের উত্তরে সমস্ত লগিং পদ্ধতিগুলি কভার করে এবং এর বিশাল সুবিধা রয়েছে যে আপনি যে কোনও সময় আইই এর কনসোল উইন্ডোটি খুলতে পারেন এবং লগগুলি প্রবাহিত হয়।


0

উইন্ডোজ and এবং উইন্ডোজ ১০ এর আইই ১১ তে আমরা এই সমস্যার মধ্যে পড়েছিলাম আমরা IE (IE> ইন্টারনেট বিকল্পসমূহ> উন্নত ট্যাব> ব্রাউজিং> আনচেক অক্ষম করুন স্ক্রিপ্ট ডিবাগিং (ইন্টারনেট এক্সপ্লোরার) এর জন্য ডিবাগিং ক্ষমতা চালু করে সমস্যাটি ঠিক কী ছিল তা আবিষ্কার করেছি । এই বৈশিষ্ট্যটি সাধারণত আমাদের পরিবেশের মধ্যে ডোমেন প্রশাসকদের দ্বারা চেক করা হয়।

সমস্যাটি হ'ল কারণ আমরা console.debug(...)আমাদের জাভাস্ক্রিপ্ট কোডের মধ্যে পদ্ধতিটি ব্যবহার করছিলাম । বিকাশকারী (আমার) দ্বারা তৈরি অনুমানটি আমি ক্লায়েন্ট বিকাশকারী সরঞ্জাম কনসোল স্পষ্টভাবে খোলা না থাকলে লিখিত কিছু চাই না। যদিও ক্রোম এবং ফায়ারফক্স এই কৌশলটির সাথে একমত বলে মনে হয়েছে, IE 11 এটিকে কিছুটা পছন্দ করেনি। console.debug(...)বিবৃতিতে সমস্ত বিবৃতি পরিবর্তন করে console.log(...)আমরা ক্লায়েন্ট কনসোলে অতিরিক্ত তথ্য লগ করতে এবং এটি যখন খোলা ছিল তা দেখতে সক্ষম হয়েছি, তবে অন্যথায় এটি সাধারণ ব্যবহারকারীর কাছ থেকে গোপন রাখতে পারি।


0

আমি আমার সমস্যার সমাধান এবং সমাধান করেছি। দেখে মনে হচ্ছে যেন আমার জাভাস্ক্রিপ্টের ভিতরে রাখার জন্য আজেএক্স অনুরোধটি প্রক্রিয়া করছে না কারণ আমার পৃষ্ঠায় কিছু ক্যাশে সমস্যা ছিল। আপনার সাইটের বা পৃষ্ঠায় ক্যাশে সমস্যা থাকলে আপনি বিকাশকারী / এফ 12 মোডে সেই সমস্যাটি দেখতে পাবেন না। আমার ক্যাশেড জাভাস্ক্রিপ্ট এজেএক্স অনুরোধ করেছে এটি প্রত্যাশিতভাবে কাজ না করে এবং কার্যকরভাবে এফ 12 এর কোনও সমস্যা নেই বলে ফাঁসির কারণ হতে পারে। তাই কেবল ক্যাশেটিকে মিথ্যা করতে নতুন প্যারামিটার যুক্ত করা হয়েছে।

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

দেখে মনে হচ্ছে IE এর বিশেষত এটি মিথ্যা হওয়া দরকার যাতে এজ্যাক্স এবং জাভাস্ক্রিপ্ট ক্রিয়াকলাপটি ভালভাবে চালিত হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.