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的哈希值.这是否意味着我可以使用它们来存储状态,还是我忽略了其他限制?
基于您的JS Fiddle(以及它的修改版本http://jsfiddle.net/Jz3ZA/18/(参见下面的代码示例)),您可以测试许多浏览器以获得有效的基线.
因此,无论其他浏览器支持什么,如果您需要支持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)
| 归档时间: |
|
| 查看次数: |
3202 次 |
| 最近记录: |