浏览器中location.hash的最大大小

Jer*_*oen 11 javascript browser firefox internet-explorer google-chrome

我想使用location.hash编码我的客户端应用程序的状态,这样用户可以使用URL轻松地在完整状态下书签和/或共享应用程序.

关于URL的最大长度有许多(过时的)主题,特别是Internet Explorer中的限制.但是目前尚不清楚最大尺寸是多少location.hash.由于散列仅存在于客户端中,因此http或服务器的限制无关紧要.

我做了一个简单的jsfiddle测试这个:http://jsfiddle.net/Jz3ZA/.在Chrome和Firefox(Ubuntu 12.04)中,最多可以使用高达50K的哈希值.这是否意味着我可以使用它们来存储状态,还是我忽略了其他限制?

scu*_*ffe 6

基于您的JS Fiddle(以及它的修改版本http://jsfiddle.net/Jz3ZA/18/(参见下面的代码示例)),您可以测试许多浏览器以获得有效的基线.

  • Chrome:50K +
  • Firefox:50K +
  • Safari(iOS):50K +
  • Internet Explorer 11:在2,025和2,050之间失败
  • Microsoft Edge:在2,025和2,050之间失败

因此,无论其他浏览器支持什么,如果您需要支持Microsoft Edge或IE11,那么您将需要保持在2,025个字符哈希值以下.由于IE(因此我猜是Edge)历史上有URL长度限制......这也可能取决于基本URL的长度.

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 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

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


Bar*_*art -7

不同浏览器中URL的最大长度是多少?

不过,这通常不包括哈希部分,所以我认为没有标准。

我想指出的是,片段标识符通常用于标识文档的片段,而不应用于存储应用程序的整个状态。您应该改用本地存储

如果您希望能够共享或添加书签,请考虑在服务器端存储应用程序的状态,并使用片段标识符来存储存储状态的 id。

  • 问题明确涉及哈希部分,因此这不能回答问题。 (3认同)