9

मैं अपने क्लाइंट ऐप की स्थिति को एन्कोड करने के लिए location.hash का उपयोग करना चाहता हूं, जैसे उपयोगकर्ता आसानी से बुकमार्क कर सकते हैं और/या यूआरएल का उपयोग करके ऐप को अपने पूरे राज्य में साझा कर सकते हैं।ब्राउज़र में location.hash का अधिकतम आकार

यूआरएल की अधिकतम लंबाई पर कई पुराने (पुराने) विषय हैं, विशेष रूप से इंटरनेट एक्सप्लोरर में सीमाएं। हालांकि यह स्पष्ट नहीं है कि location.hash का अधिकतम आकार क्या है। चूंकि हैश केवल क्लाइंट में मौजूद है, http या सर्वर की सीमाएं प्रासंगिक नहीं हैं।

मैंने इसका परीक्षण करने के लिए एक सरल jsfiddle बनाया: http://jsfiddle.net/Jz3ZA/। क्रोम और फ़ायरफ़ॉक्स दोनों में (उबंटू 12.04) 50K तक हैश काम करने लगते हैं। क्या इसका मतलब है कि मैं उन्हें राज्य को स्टोर करने के लिए उपयोग कर सकता हूं या क्या मैं अन्य सीमाओं को देख रहा हूं?

+2

वहाँ कम से किए गए सभी URL पर आकार प्रतिबंध के लिए कोई मानक है, इसलिए हैश सैद्धांतिक रूप से किसी भी लम्बाई हो सकता है, लेकिन आप भरोसा नहीं कर सकते क्या विशेष ब्राउज़र करेंगे (विशेष रूप से आईई)। –

+0

आप राज्य को सर्वर में क्यों स्टोर नहीं करते? – Blender

+0

मैंने इंटरनेट एक्सप्लोरर 11 पर अपना बेवकूफ चलाया है और यह हैश लंबाई 3000 –

उत्तर

-2

What is the maximum length of a URL in different browsers?

यह आमतौर पर हालांकि हैश हिस्सा शामिल नहीं है, इसलिए मैं वहाँ एक मानक है नहीं लगता।

मैं यह इंगित करना चाहता हूं कि खंड पहचानकर्ता आमतौर पर किसी दस्तावेज़ के टुकड़े की पहचान करने के लिए उपयोग किया जाता है, और इसका उपयोग किसी ऐप की संपूर्ण स्थिति को स्टोर करने के लिए नहीं किया जाना चाहिए। आपको इसके बजाय localstorage का उपयोग करना चाहिए।

यदि आप साझा करने या बुकमार्क करने की क्षमता चाहते हैं, तो सर्वर के पक्ष में ऐप की स्थिति को संग्रहीत करने पर विचार करें, और संग्रहित स्थिति की आईडी को संग्रहीत करने के लिए खंड पहचानकर्ता का उपयोग करें।

+3

पर विफल रहता है सवाल यह हैश के हिस्से के बारे में स्पष्ट रूप से था, इसलिए यह सवाल का जवाब नहीं देता है। – Jeroen

-1

इस तरह के एक भ्रामक स्पष्टीकरण। हैश के पास आकार की कोई सीमा नहीं है और जितनी चाहें उतनी ही इसका उपयोग करने में संकोच न करें। बस याद रखें कि यह एक यूआरएल हिस्सा नहीं है।

+1

मुझे नहीं लगता कि यह सच है।विकिपीडिया कहता है: * हैश मार्क # द्वारा पेश किया गया टुकड़ा पहचानकर्ता दस्तावेज़ के लिए यूआरएल का वैकल्पिक अंतिम भाग है। * – Jeroen

4

आपके जेएस फिडल के आधार पर (http://jsfiddle.net/Jz3ZA/18/ का एक संशोधित संस्करण (नीचे कोड उदाहरण देखें)), आप एक प्रभावी बेसलाइन प्राप्त करने के लिए कई ब्राउज़रों का परीक्षण कर सकते हैं।

  • क्रोम: 50K +
  • फ़ायरफ़ॉक्स: 50K +
  • Safari (iOS): 50K +
  • इंटरनेट एक्सप्लोरर 11: विफल 2,025 के बीच और 2,050
  • माइक्रोसॉफ्ट एज: विफल 2,025 और 2,050
के बीच

इस प्रकार चाहे अन्य ब्राउज़र कौन सा समर्थन करते हैं, यदि आपको माइक्रोसॉफ्ट एज या आईई 11 का समर्थन करने की आवश्यकता है तो आपको 2,025 वर्ण हैंश के तहत रहना होगा। आईई (और इस प्रकार मैं एज अनुमान लगा रहा हूं) के बाद से ऐतिहासिक रूप से यूआरएल की लंबाई सीमाएं थीं ... यह आपके बेस यूआरएल की लंबाई पर भी निर्भर हो सकती है।

function testall(){ 
 
    var sizes = [10,100,1000,2000,2025,2050,2100,2250,2500,2750,3000,4000,5000,10000, 50000]; 
 
    for(var i=0;i<sizes.length;i++){ 
 
    var n = sizes[i]; 
 
    if(!testhash(n)){ 
 
     alert("test failed at hash of length: " + n); 
 
     return; 
 
    } 
 
    } 
 
    alert("all tests passed"); 
 
} 
 

 
function testhash(n){ 
 
    var somestring = "#" + makestring(n); 
 
    window.location.hash = somestring; 
 
    var success = (window.location.hash == somestring); 
 
    return success 
 
}  
 

 
function makestring(n){ 
 
    var text = ""; 
 
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 
 

 
    for(var i=0;i<n;i++){ 
 
     text += possible.charAt(Math.floor(Math.random() * possible.length)); 
 
    } 
 
    return text; 
 
} 
 
$("button").on("click", testall);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<button>Test!</button>

संबंधित मुद्दे