传参
window.open('http://www.baidu.com?query=11&&query2==22','_blank')
获取参数
方法一:采用正则表达式获取地址栏参数
function GetQueryString(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if(r!=null)return unescape(r[2]); return null;
}
此方法如果? 前有 # 则获取不到 window.location.search,search只能取到?之后 #之前的内容
方法二
GetQueryString() {
let data = {}
let src = window.location.href
let index = src.indexOf("?");
if (index === -1) {
return data;
}
let dataStr = src.substring(src.indexOf("?") + 1);
let dataArray = dataStr.split("&");
dataArray.forEach((str) => {
let param = str.split("=");
data[param[0]] = param[1];
});
return data;
},
url传参包含对象
encodeURIComponent:地址栏有特殊字符进行编码
当地址栏有"%"号时需要正则替换掉 不然在解码页面会报错:URI malformed报错
let url = `http://www.baidu.com?info=${encodeURIComponent(JSON.stringify(info))}`;
console.log('url1111', url);
if (url.indexOf('%') > -1) {
url = url.replace(/%/g, '%25');
} // 解决URI malformed报错的bug
解析
JSON.parse(decodeURIComponent(option.info))
url传参长度问题
Microsoft Internet Explorer (Browser)
IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。
Firefox (Browser)
对于Firefox浏览器URL的长度限制为65,536个字符,但当我测试时,最大只能处理8182个字符,这是因为url的长度除了浏览器限制外,还会受Web服务器的限制。
Safari (Browser)
URL最大长度限制为 80,000个字符。
Opera (Browser)
URL最大长度限制为190,000个字符。
Google (chrome)
url最大长度限制为8182个字符
如果最大长度限制为2038字符,是不是参数差不多可以传递1000个左右的汉字。这样认为其实是不对的,对于中文的传递,最终会为urlencode后的编码形式进行传递,如果浏览器的编码为UTF8的话,一个汉字最终编码后的字符长度为9个字符。
PS:window.location 对象所包含属性
属性 | 描述 |
---|---|
hash | 从井号 (#) 开始的 URL(锚) |
host | 主机名和当前 URL 的端口号 |
hostname | 当前 URL 的主机名 |
href | 完整的 URL |
pathname | 当前 URL 的路径部分 |
port | 当前 URL 的端口号 |
protocol | 当前 URL 的协议 |
search | 从问号 (?) 开始的 URL(查询部分) |