IE

2014-12-11 13 views
12

में प्रत्येक ब्राउज़र टैब में अलग-अलग फ़ेविकॉन हमारे पास हमारे एप्लिकेशन में एक कस्टम सत्र तंत्र है, जो उपयोगकर्ता को प्रत्येक ब्राउज़र टैब, में अलग-अलग सत्र (उदा।, अलग-अलग प्रमाण-पत्र) रखने की अनुमति देता है, भले ही यूआरएल हों। यह तंत्र आईई (v11) सहित सभी प्रमुख ब्राउज़रों में बहुत अच्छा काम करता है।IE

समस्या

हम (अलग रंग के साथ) से संकेत मिलता है जो टैब जो सत्र के अंतर्गत आता है विभिन्न फ़ेविकॉन के साथ प्रत्येक ब्राउज़र टैब की आपूर्ति करना चाहते हैं। ऐसा करने के लिए, हम सत्र के आधार पर विभिन्न फ़ेविकॉन URL का उपयोग

<link rel='icon' href='url_to_favicon_session_id' type='image/ico'/> 

यह फ़ायरफ़ॉक्स और क्रोम में अच्छा काम करता है, फिर भी आईई (जैसे URL पर ओर इशारा करते हुए आइकन प्रत्येक टैब में एक ही है सभी टैब के बीच फ़ेविकॉन साझा करने के लिए लगता है सेट , लोड करने का क्रम प्रत्येक टैब में दिखाई देने वाले फेविकॉन को निर्धारित करता है)।

सवाल

हम किसी भी तरह एक ही यूआरएल के साथ संपूर्ण ब्राउज़र टैब में favicons साझा करने के लिए IE के लिए मजबूर कर सकते हैं?

नोट, यूआरएल बदलना यहां एक विकल्प नहीं है।

मिनिमल कार्य उदाहरण

पूर्ण कोड स्निपेट नीचे समस्या पुन: पेश करने (एचटीएमएल 5 समर्थन के साथ IE में चलाने के लिए एक वेब सर्वर पर डाल दिया, एक ही ब्राउज़र के कई टैब में इस फ़ाइल को खोलने)।

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
     <script type="text/javascript"> 

      var icons = [ 
       "http://google.com/images/google_favicon_128.png", 
       "https://assets-cdn.github.com/favicon.ico", 
       "https://www.microsoft.com/favicon.ico?v2", 
       "https://s.yimg.com/rz/l/favicon.ico", 
       "http://www.stackoverflow.com/favicon.ico", 
      ]; 

      var idx = localStorage["favicon"]; 
      if (idx === undefined) { 
       idx = 0; 
      } else { 
       idx = parseInt(idx); 
      } 

      localStorage["favicon"] = (idx + 1) % icons.length; 

      var link = document.createElement('link'); 
      link.type = 'image/x-icon'; 
      link.rel = 'icon'; 
      link.href = icons[idx]; 
      document.getElementsByTagName('head')[0].appendChild(link); 

     </script> 
    </head> 
    <body> 
     Open this page in multiple tabs. Favicon should be different in each tab. 
    </body> 
</html> 
+0

उदाहरण में, फेविकॉन टैग जावास्क्रिप्ट के माध्यम से उत्पन्न होता है। क्या यह वास्तविक आवेदन में भी मामला है? यदि ऐसा है, तो मैं कल्पना कर सकता हूं कि IE अपने कैश (यूआरएल के आधार पर) से फेविकॉन लोड करता है और जावास्क्रिप्ट में आने पर इसे फिर से लोड नहीं करेगा। उस स्थिति में, आप इसे प्रारंभिक पृष्ठ सामग्री में सर्वर पक्ष प्रस्तुत करने का प्रयास कर सकते हैं। – GolezTrol

+0

नहीं, असली एप्लिकेशन फेविकॉन में HTML कोड में एम्बेड किया गया है।हालांकि यह आईई * कैसे * पृष्ठ में फेविकॉन शामिल है के लिए कोई फर्क नहीं पड़ता, लेकिन * पृष्ठ * यूआरएल क्या है। इसके अलावा यह एक कैशिंग समस्या नहीं है, क्योंकि (1) यदि आप दो अलग-अलग यूआरएल में प्रदान किए गए कोड को लोड करते हैं तो यह अपेक्षित काम करता है, (2) भले ही एचटीएमएल कैश किया गया हो, स्क्रिप्ट अलग फेविकॉन यूआरएल लोड करेगी, इसलिए फेविकॉन फाइल कैशिंग नहीं है यहां प्रासंगिक – tomash

+0

प्रत्येक सत्र के लिए पेज यूआरएल में एक डमी अद्वितीय पैरामीटर जोड़ने के लिए चारों ओर एक काम हो सकता है (उदा। Http://yoursite.com/page?id= )। यह आईई 11 को प्रत्येक टैब पर एक अलग फेविकॉन लोड करने के लिए मजबूर करेगा। – dbcb

उत्तर

1

मेरे अनुभव, IE, लगभग सभी अन्य ब्राउज़रों के साथ साथ, favicons के निरंतर पुनः प्राप्ति को रोकने के लिए एक कैश तंत्र पेज के कैश से अलग उपयोग करता है। इसका अर्थ यह है कि फेविकॉन में परिवर्तन अप्रत्याशित हो सकते हैं जब तक कि यूआरएल बदल नहीं जाता है और डोमेन के लिए कैश साफ़ हो जाता है। मैं इस बारे में एकमात्र विश्वसनीय तरीका यह देख सकता हूं कि आईई को प्रत्येक सत्र के आइकन को अलग-अलग कैश करने के लिए प्रत्येक सत्र के लिए टैब की पहचान करने के लिए एक अद्वितीय आईडी जोड़नी है।

आप एक जीईटी वैरिएबल (यानी yoursite.com/page?sessionid) को आजमा सकते हैं, हालांकि, मेरे अनुभव में, आईई अभी भी उसी डोमेन में फेविकॉन को उसी डोमेन में फेविकॉन जीईटी वैरिएबल के बावजूद कैश कर रहा है। वास्तव में, Microsoft's documentation कहता है कि आप अलग-अलग पृष्ठों को अलग-अलग फेविकॉन के लिए प्राप्त करने के लिए लिंक टैग का उपयोग कर सकते हैं, हालांकि, मुझे अक्सर पता चलता है कि यदि आप कैश साफ़ किए बिना लिंक टैग बदलते हैं तो भी आईई का फेविकॉन कैश अपडेट नहीं होगा। इसके अलावा, यदि आपके पास सभी कैशिंग बंद हैं तो आईई बिल्कुल फेविकॉन प्रदर्शित नहीं करेगा। और, ऐसा लगता है कि आईई के कुछ संस्करणों में, लिंक टैग को प्राथमिक स्थान पर जो भी फेविकॉन है, उस पर प्राथमिकता नहीं लेती है।

मुझे सही पृष्ठ पर अनुरोध प्राप्त करने के लिए रूटिंग स्क्रिप्ट का उपयोग करने और फिर पथ के हिस्से (यानी yoursite.com/page/sessionid) के रूप में सत्रित को जोड़ने में कुछ सफलता मिली है। सत्रिका को अनदेखा करने के लिए इसके लिए आपकी रूटिंग स्क्रिप्ट में थोड़ा अतिरिक्त काम की आवश्यकता है, लेकिन मेरे अनुभव में यह एकमात्र चीज है, जिसने विभिन्न सत्रों के लिए आईई को विभिन्न फेविकॉन को पहचानने के लिए सिमी-विश्वसनीय रूप से काम किया।

+0

URL और रूटिंग स्क्रिप्ट में सत्र आईडी के साथ तरीका वास्तव में एक तरीका है कि हमारा सत्र तंत्र कैसे काम करता है। हालांकि उपयोगकर्ता को दिखाई देने वाले पृष्ठ का URL (स्थान पट्टी में) इतिहास API का उपयोग करके धोखा दिया गया है। हम नहीं चाहते हैं कि उपयोगकर्ता सत्र आईडी देखे या इसे कहीं कॉपी करें (नोट: यह वास्तव में हमारे मामले में एक सुरक्षा चिंता नहीं है, बल्कि उपयोगिता एक है)। इस सवाल से पूछने पर मुझे वास्तव में उम्मीद थी कि कुछ आईई अंदरूनी लड़का हमें यूआरएल की तुलना में कुछ अन्य कारक बताएगा जो प्रदर्शित फेविकॉन को प्रभावित करता है या हमें यह सुनिश्चित करता है कि इस तरह का कारक मौजूद नहीं है। – tomash

+0

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