आईई 11 का पता लगाने सीएसएस क्षमता / सुविधा का उपयोग कर


90

IE10 + अब ब्राउज़र की पहचान करने के लिए ब्राउज़र डिटेक्शन टैग का समर्थन नहीं करता है।

IE10 का पता लगाने के लिए मैं जावास्क्रिप्ट का उपयोग कर रहा हूं और कुछ msउपसर्ग शैलियों का पता लगाने के लिए क्षमता-परीक्षण तकनीक का उपयोग किया जाता है जैसे कि msTouchActionऔर msWrapFlow

मैं IE11 के लिए भी ऐसा ही करना चाहता हूं, लेकिन मैं यह मान रहा हूं कि IE11 में सभी IE10 शैलियों का समर्थन किया जाएगा। क्या कोई मुझे आईई 11 को केवल उन शैलियों या क्षमताओं की पहचान करने में मदद कर सकता है जिनका उपयोग मैं दो को अलग-अलग करने के लिए कर सकता हूं?

अधिक जानकारी

  • मैं उपयोगकर्ता एजेंट प्रकार का पता लगाने का उपयोग नहीं करना चाहता क्योंकि यह बहुत धब्बेदार है, और इसे बदला जा सकता है, साथ ही मुझे लगता है कि मैंने पढ़ा है कि IE11 जानबूझकर इस तथ्य को छिपाने की कोशिश कर रहा है कि यह इंटरनेट एक्सप्लोरर है।
  • IE10 क्षमता परीक्षण कैसे काम करता है, इसके एक उदाहरण के लिए, मैंने अपने परीक्षण के लिए आधार के रूप में इस JsFiddle (मेरा नहीं) का उपयोग किया ।
  • इसके अलावा मैं "यह एक बुरा विचार है ..." के बहुत सारे जवाबों की उम्मीद कर रहा हूँ। इसके लिए मेरी एक जरूरत यह है कि IE10 का दावा है कि यह कुछ का समर्थन करता है, लेकिन यह बहुत बुरी तरह से लागू है, और मैं IE10 और IE11 + के बीच अंतर करने में सक्षम होना चाहता हूं, इसलिए मैं भविष्य में क्षमता-आधारित पहचान पद्धति के साथ आगे बढ़ सकता हूं।
  • यह परीक्षण एक माडर्निज़्र परीक्षण के साथ युग्मित है जो कम ग्लैमरस व्यवहार के लिए कुछ कार्यक्षमता "कमबैक" करेगा। हम महत्वपूर्ण कार्यक्षमता के बारे में बात नहीं कर रहे हैं।

मैं भी पहले से ही मॉर्डनिज़्र का उपयोग कर रहा हूं, लेकिन यह यहां मदद नहीं करता है। मुझे अपने स्पष्ट रूप से पूछे जाने वाले प्रश्न के समाधान के लिए मदद चाहिए।


3
आपको यह जानने की आवश्यकता क्यों है कि उपयोगकर्ता के पास क्या ब्राउज़र है? क्या पता लगाने / सीएसएस उपसर्ग / सीएसएस की स्थिति पर्याप्त नहीं है?
डेविड-स्काईमेश

4
मैं यह उल्लेख करना भूल गया कि हमारे पास ब्राउज़रों का पता लगाने की आवश्यकता के लिए हमारे कारण हैं, कि क्षमता परीक्षण से मदद नहीं मिलती है। हमारी समस्याओं में से एक यह है कि IE10 कहता है कि यह कुछ का समर्थन करता है, लेकिन यह बहुत अच्छा नहीं करता है।
डानो सेप

2
@ डेविड-स्काईमेश - नहीं, यह दुर्भाग्य से पर्याप्त नहीं है। मुझे यह पसंद है, लेकिन यह नहीं है।
डानो सेप

1
@Evildonald आपने जवाब नहीं दिया कि आपको विशेष रूप से क्यों जानना है। यह अच्छी तरह से हो सकता है कि यह एक XY समस्या है। (यानी: आप एक्स के साथ मदद करने के लिए उपयोग कर रहे हैं - आईई 11 का पता लगाने के लिए - जब हम एक अलग प्रश्न का उत्तर दे सकते हैं वाई - कैसे
टीएएसके

1
मेरे पास एक .js है जो ब्राउज़र संस्करणों का पता लगाता है, और उसने कहा कि ie11 एक फ़ायरफ़ॉक्स था। क्या हो रहा है, डेवलपर्स!
डेनियल चेउंग

जवाबों:


163

विकसित धागे के प्रकाश में, मैंने नीचे अद्यतन किया है:

IE 6

* html .ie6 {property:value;}

या

.ie6 { _property:value;}

IE 7

*+html .ie7 {property:value;}

या

*:first-child+html .ie7 {property:value;}

IE 6 और 7

@media screen\9 {
    .ie67 {property:value;}
}

या

.ie67 { *property:value;}

या

.ie67 { #property:value;}

IE 6, 7 और 8

@media \0screen\,screen\9 {
    .ie678 {property:value;}
}

IE 8

html>/**/body .ie8 {property:value;}

या

@media \0screen {
    .ie8 {property:value;}
}

IE 8 मानक मोड केवल

.ie8 { property /*\**/: value\9 }

IE 8,9 और 10

@media screen\0 {
    .ie8910 {property:value;}
}

आईई 9 केवल

@media screen and (min-width:0\0) and (min-resolution: .001dpcm) { 
 // IE9 CSS
 .ie9{property:value;}
}

IE 9 और इसके बाद के संस्करण

@media screen and (min-width:0\0) and (min-resolution: +72dpi) {
  // IE9+ CSS
  .ie9up{property:value;}
}

IE 9 और 10

@media screen and (min-width:0) {
    .ie910{property:value;}
}

आईई 10 केवल

_:-ms-lang(x), .ie10 { property:value\9; }

IE 10 और इसके बाद के संस्करण

_:-ms-lang(x), .ie10up { property:value; }

या

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
   .ie10up{property:value;}
}

के उपयोग -ms-high-contrastका मतलब है एमएस एज को निशाना नहीं बनाया जाएगा कि जा, एज समर्थन नहीं करता है-ms-high-contrast

IE 11

_:-ms-fullscreen, :root .ie11up { property:value; }

जावास्क्रिप्ट विकल्प

Modernizr

आधुनिकीकरण सुविधाओं का पता लगाने के लिए पेज लोड पर जल्दी से चलता है; यह तब परिणामों के साथ एक जावास्क्रिप्ट ऑब्जेक्ट बनाता है, और html तत्व में कक्षाएं जोड़ता है

उपयोगकर्ता एजेंट चयन

जावास्क्रिप्ट:

var b = document.documentElement;
        b.setAttribute('data-useragent',  navigator.userAgent);
        b.setAttribute('data-platform', navigator.platform );
        b.className += ((!!('ontouchstart' in window) || !!('onmsgesturechange' in window))?' touch':'');

नीचे (जैसे) htmlतत्व को जोड़ता है :

data-useragent='Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)'
data-platform='Win32'

सीएसएस चयनकर्ताओं को बहुत लक्षित करना, जैसे:

html[data-useragent*='Chrome/13.0'] .nav{
    background:url(img/radial_grad.png) center bottom no-repeat;
}

पाद लेख

यदि संभव हो, तो किसी भी मुद्दे को बिना हैक्स के पहचानें और ठीक करें। प्रगतिशील वृद्धि और सुशोभित गिरावट का समर्थन करें । हालांकि, यह एक 'आदर्श दुनिया' का परिदृश्य है जो हमेशा प्राप्य नहीं होता है, जैसे कि- ऊपर कुछ अच्छे विकल्प प्रदान करने में मदद करनी चाहिए।


एट्रिब्यूशन / एसेंशियल रीडिंग


3
यह वास्तव में उत्तर होना चाहिए। बहुत अच्छी जानकारी!
egr103

IE10 केवल मेरे लिए काम नहीं करता है। बैकस्लैश -9 IE11 को नहीं हटाता है। मैं IE 10 के लिए नहीं बल्कि IE11 के लिए एक डिव दिखाने की कोशिश कर रहा हूँ ... यह अभी भी IE 11 को दिखाता है ...
Merc

आह अजीब। यह अधिकांश संपत्तियों पर काम करता है, लेकिन clip: auto\9;अभी भी clip: auto;IE 11 में इसकी व्याख्या की जाती है। किसी भी तरह इसे नजरअंदाज नहीं किया जाता ...
Merc

2
मेरे लिए, IE11 के लिए दूसरे IE10 विकल्प ने काम किया: @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { .relevant_selectors_for_situation {property:value;} }मैंने इसे Mediacurrent.com/blog/…
cedricdlb

1
यह सब पढ़ने के बाद मुझे लगता है कि -ms-high-contrast: activeइससे बचने के लिए कुछ हो सकता है क्योंकि एमएस विनिर्देशों के अनुसार आप वास्तव में अपने IE 10/11 नियमों के साथ एज में उच्च-विपरीत थीम उपयोगकर्ताओं को लक्षित करेंगे। पृष्ठ में यह उत्तर इसके संबंध में लिंक -ms-high-contrastवास्तव में कहता है कि बस -ms-high-contrast: noneमूल्य अब समर्थित नहीं है। मुझे लगता है कि कोई भी इसका उल्लेख नहीं करता है क्योंकि अधिकांश लोगों के पास उच्च कंट्रास्ट मोड सक्षम नहीं है और अधिकांश लोग एज का उपयोग नहीं करते हैं। लेकिन फिर भी, वहाँ कोई है जो उस विन्यास है और यह शायद उनके लिए अच्छा नहीं है।
दत्तमल्लेस

39

केवल IE10 और IE11 को लक्षित करने के लिए (और एज नहीं):

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* add your IE10-IE11 css here */   
}

1
कुछ इस तरह से एक सास मिश्रण भी हो सकता है!
डानो

2
क्या यह IE11 को लक्षित करता है या एज को भी?
मैथ्यू फेलगेट

2
IE10 और IE11 लक्ष्य लेकिन बढ़त नहीं।
जेफ क्लेटन

23

इसलिए मैंने अंत में इस समस्या का अपना समाधान पाया।

Microsoft प्रलेखन के माध्यम से खोज करने के बाद मैं एक नई IE11 केवल शैली खोजने में कामयाब रहाmsTextCombineHorizontal

अपने परीक्षण में, मैं IE10 शैलियों की जांच करता हूं और यदि वे एक सकारात्मक मैच हैं, तो मैं IE11 शैली के लिए जांच करता हूं। अगर मुझे यह मिल गया, तो यह IE11 + है, अगर मैं नहीं करता, तो यह IE10 है।

कोड उदाहरण: CSS क्षमता परीक्षण (JSFiddle) द्वारा IE10 और IE11 का पता लगाएं

जब मुझे पता चलता है तो मैं अधिक शैलियों के साथ कोड उदाहरण को अपडेट करूंगा।

ध्यान दें: यह लगभग निश्चित रूप से IE12 और IE13 की पहचान "IE11" के रूप में करेगा, क्योंकि ये शैली संभवतः आगे ले जाएंगी। मैं आगे के परीक्षणों को जोड़ूंगा क्योंकि नए संस्करण रोल आउट होंगे, और उम्मीद है कि वे फिर से मॉडर्निज़र पर भरोसा कर पाएंगे।

मैं फॉलबैक व्यवहार के लिए इस परीक्षण का उपयोग कर रहा हूं। फॉलबैक व्यवहार सिर्फ कम ग्लैमरस स्टाइल है, इसमें कार्यक्षमता कम नहीं है।


8
अगर किसी को -1 का जवाब दिया जा रहा है, तो कृपया कम से कम एक तकनीकी कारण के साथ इसे करने की शालीनता रखें । आप इससे असहमत हो सकते हैं .. लेकिन यह सही है और यह काम करता है।
डानो

7
आपको कैसे पता चलेगा कि यह कोड IE12, IE13 और इतने पर सही परिणाम देगा या नहीं?
एवगेनी

6
आप इस विधि का उपयोग क्यों कर रहे हैं if (document.documentMode === 11) { ... }? जब तक, निश्चित रूप से, आप एक सीएसएस में सीएसएस संपत्ति का उपयोग करना चाहते हैं @supports(जो कि IE में अभी तक समर्थित नहीं है, वैसे)।
रोब डब्ल्यू

1
यदि आपके पास अपने बॉडी टैग में मौजूदा कक्षाएं हैं, तो यह उन्हें अधिलेखित कर देगा। यहाँ बहुत मामूली सुधार है: jsfiddle.net/jmjpro/njvr1jq2/1
jbustamovej

1
इसके अलावा, आप सीवी के साथ ieVersion तत्व को छिपाना चाहते हैं: #ieVersion {डिस्प्ले: कोई नहीं}
jbustamovej

19

यह काम करने लगता है:

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* IE10+ specific styles go here */  
}

https://www.limecanvas.com/css-hacks-for-targeting-ie-10-and-above/


यह एक ie10 और ie11 के बीच अंतर नहीं करता है, लेकिन अगर आपको भी ie10 का पता लगाने में कोई आपत्ति नहीं है तो आप इस एक के साथ अच्छे हैं।
जेफ क्लेटन

9

आप अपने IE11 कोड को सामान्य रूप से लिख सकते हैं और फिर @supportsउदाहरण के लिए IE11 में समर्थित नहीं होने वाली प्रॉपर्टी के लिए उपयोग और जांच कर सकते हैंgrid-area: auto

आप इसके बाद अपनी आधुनिक ब्राउज़र शैलियों को लिख सकते हैं। IE @supportsनियम का समर्थन नहीं करता है और मूल शैलियों का उपयोग करेगा, जबकि ये आधुनिक ब्राउज़र में ओवरराइड किए जाएंगे जो समर्थन करते हैं @supports

.my-class {
// IE the background will be red
background: red;

   // Modern browsers the background will be blue
    @supports (grid-area: auto) {
      background: blue;
    }
}

2
यह काम करता है और एक अच्छा समाधान है, लेकिन दिया गया तर्क सही नहीं है। IE11 बिल्कुल समर्थन नहीं करता है @supports, इसलिए यह @supportsब्लॉक में किसी भी चीज को अनदेखा करता है । तो आप @supports सशर्त (जैसे @supports (display: block)) में कुछ भी डाल सकते हैं और IE11 अभी भी इसे छोड़ देगा।
कोडबाइकर

1
यह मेरा मतलब है "आईई 11 की अनदेखी करेगा" लेकिन आप सही हैं, यह पूरी तरह से स्पष्ट नहीं है। मैंने उत्तर को अधिक स्पष्ट होने के लिए अद्यतन किया है कि IE @supports का समर्थन नहीं करता है।
एंटीफिश नोव

9

यहां 2017 के लिए एक उत्तर दिया गया है, जहां आप शायद केवल <= IE11 से> IE11 ("एज") में अंतर करने के बारे में परवाह करते हैं:

@supports not (old: ie) { /* code for not old IE here */ }

अधिक प्रदर्शनकारी उदाहरण:

body:before { content: 'old ie'; }
/**/@supports not (old: ie) {
body:before { content: 'not old ie'; }
/**/}

यह काम करता है क्योंकि IE11 वास्तव में भी समर्थन नहीं करता है @supports, और अन्य सभी प्रासंगिक ब्राउज़र / संस्करण संयोजन करते हैं।


4

इसने मेरे लिए काम किया

if(navigator.userAgent.match(/Trident.*rv:11\./)) {
    $('body').addClass('ie11');
}

और फिर सीएसएस फ़ाइल में उपसर्ग के साथ फाइल की गई चीजें

body.ie11 #some-other-div

यह ब्राउज़र कब मरने के लिए तैयार है?



3

इस लेख पर नज़र डालें: CSS: उपयोगकर्ता एजेंट चयनकर्ता

मूल रूप से, जब आप इस स्क्रिप्ट का उपयोग करते हैं:

var b = document.documentElement;
b.setAttribute('data-useragent',  navigator.userAgent);
b.setAttribute('data-platform', navigator.platform );
b.className += ((!!('ontouchstart' in window) || !!('onmsgesturechange' in window))?' touch':'');

अब आप किसी भी ब्राउज़र / संस्करण को लक्षित करने के लिए CSS का उपयोग कर सकते हैं।

तो IE11 के लिए हम यह कर सकते हैं:

बेला

html[data-useragent*='rv:11.0']
{
    color: green;
}

1
यह फ़ायरफ़ॉक्स 11 में टूट जाएगा (भले ही यह अभी असमर्थित है, यह मायने रखता है)। rv:11.0इसके उपयोगकर्ता एजेंट स्ट्रिंग में भी है ।
PhistucK


2

आपको मॉडर्निज़्र का उपयोग करना चाहिए, यह बॉडी टैग में एक वर्ग जोड़ देगा।

भी:

function getIeVersion()
{
  var rv = -1;
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  else if (navigator.appName == 'Netscape')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}

ध्यान दें कि IE11 अभी भी पूर्वावलोकन में है, और उपयोगकर्ता एजेंट रिलीज़ होने से पहले बदल सकता है।

IE 11 के लिए यूजर-एजेंट स्ट्रिंग वर्तमान में यह एक है:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

जिसका अर्थ है कि आपका केवल 11.11 संस्करण के लिए परीक्षण कर सकते हैं,

var isIE11 = !!navigator.userAgent.match(/Trident.*rv 11\./)

धन्यवाद नव, लेकिन मैं पहले से ही अपने शरीर टैग में एक वर्ग जोड़ रहा हूं और मॉर्डनिज़्र का उपयोग कर रहा हूं। मैं IE11 से IE11 से उपयोगकर्ता एजेंट का उपयोग किए बिना अंतर करने का एक तरीका हूं, जो भरोसेमंद नहीं है।
डानो सेप

आर.वी. में पेट के लापता 11. वर isIE11 = !! navigator.userAgent.match (/Trident.*rv:11 \ ./)
T.CK

2

शायद लेआउट इंजन v0.7.0 आपकी स्थिति के लिए एक अच्छा समाधान है। यह ब्राउज़र फ़ीचर डिटेक्शन का उपयोग करता है और न केवल IE11 और IE10, बल्कि IE9, IE8 और IE7 का भी पता लगा सकता है। यह कुछ मोबाइल ब्राउज़रों सहित अन्य लोकप्रिय ब्राउज़रों का भी पता लगाता है। यह html टैग में एक वर्ग जोड़ता है, इसका उपयोग करना आसान है, और यह कुछ काफी गहरे परीक्षण के तहत अच्छा प्रदर्शन करता है।

http://mattstow.com/layout-engine.html


2

यदि आप मॉडर्निज़्र का उपयोग कर रहे हैं - तो आप IE10 और IE11 के बीच आसानी से अंतर कर सकते हैं।

IE10 pointer-eventsसंपत्ति का समर्थन नहीं करता है। IE11 करता है। ( कैनीयूज़ )

अब, क्लास के आधार पर, जो कि मॉर्डनिजर सम्मिलित करता है, आपके पास निम्नलिखित सीएसएस हो सकते हैं:

.class
{ 
   /* for IE11 */
}

.no-pointerevents .class
{ 
   /* for IE10 */
}

2

सशर्त टिप्पणियों के मानक को बनाए रखने के लिए आप js का उपयोग कर सकते हैं और html में एक वर्ग जोड़ सकते हैं :

  var ua = navigator.userAgent,
      doc = document.documentElement;

  if ((ua.match(/MSIE 10.0/i))) {
    doc.className = doc.className + " ie10";

  } else if((ua.match(/rv:11.0/i))){
    doc.className = doc.className + " ie11";
  }

या गेंदबाज की तरह एक दायित्व का उपयोग करें:

https://github.com/ded/bowser

या सुविधा का पता लगाने के लिए आधुनिकीकरण:

http://modernizr.com/


2

IE और इसके संस्करणों का पता लगाना वास्तव में बेहद आसान है, कम से कम अत्यंत सहज है:

var uA = navigator.userAgent;
var browser = null;
var ieVersion = null;

if (uA.indexOf('MSIE 6') >= 0) {
    browser = 'IE';
    ieVersion = 6;
}
if (uA.indexOf('MSIE 7') >= 0) {
    browser = 'IE';
    ieVersion = 7;
}
if (document.documentMode) { // as of IE8
    browser = 'IE';
    ieVersion = document.documentMode;
}

इस तरह, आप संगतता मोड / दृश्य में उच्च IE संस्करण भी पकड़ रहे हैं। इसके बाद, सशर्त वर्गों को असाइन करने की बात:

var htmlTag = document.documentElement;
if (browser == 'IE' && ieVersion <= 11)
    htmlTag.className += ' ie11-';


2

मैं IE11 में ग्रेविटी फॉर्म (वर्डप्रेस) के साथ एक ही समस्या में भाग गया। प्रपत्र की कॉलम शैली "प्रदर्शन: इनलाइन-ग्रिड" ने लेआउट को तोड़ दिया; ऊपर दिए गए उत्तरों को लागू करने से विसंगति दूर हो गई!

@media all and (-ms-high-contrast:none){
  *::-ms-backdrop, .gfmc-column { display: inline-block;} /* IE11 */
}

1

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

आपको http://modernizr.com/ को हिट करने की बजाय जारी रखना चाहिए कि आप क्या कर रहे हैं।


एक वैकल्पिक समाधान के लिए धन्यवाद, लेकिन मैं पहले से ही मॉर्डनिज़्र का उपयोग कर रहा हूं, और IE10 इसकी क्षमताओं का गलत प्रतिनिधित्व करता है।
डानो सेप

4
मुझे लगता है कि आप जानते हैं कि किन लोगों ने, और माडर्निज़र के साथ एक मुद्दा दायर किया है ताकि वे उस विशेष ब्राउज़र के लिए और अधिक माडर्निज़र्स चेक जोड़ सकें? (यदि नहीं, तो आपको चाहिए। यदि आपको कुछ ऐसा लगता है, जो सैकड़ों-हज़ारों
देवों को प्रभावित

7
हम में से उन लोगों के कोड उपयोगकर्ता-उन्मुख लिखने के लिए, आप अक्सर एक जवाब की जरूरत है अब , नहीं एक बग एक तीसरी पार्टी पुस्तकालय में दायर किया है और एक वहाँ पैच। जो कहना है, यह अच्छा है कि आप चाहते हैं कि वे मॉडर्निज़र में सुधार करें, लेकिन यह यहां फिट नहीं है।
डीन जे

1
मुझे लगता है कि वास्तविक ब्राउज़र का पता लगाना प्रति सेकेंड एक उचित लक्ष्य है।
gwg

@DJJ यकीन है, और उन सवालों के लिए किसी और को एक जवाब भी प्रदान करेगा। यह इस तरह की प्रतिक्रियाएं प्राप्त करने के लिए किसी भी कम महत्वपूर्ण नहीं बनाता है जो आपको यह सोचने के लिए कहता है कि आप क्या कर रहे हैं। इसके अलावा, पश्चाताप के समय पद के लिए कोई संपादन नहीं था, और "मुझे अभी इसे काम करने की आवश्यकता है" का कोई उल्लेख नहीं था, इसलिए मुझे यह मानने का कोई कारण नहीं था कि वे एक वास्तविकता की जांच नहीं चाहते थे।
माइक 'पोमैक्स' कमेरमन्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.