如何在JavaScript中获取未解码的页面URL?$(document)[0].URL是否安全?
获取未解码的完整页面URL解决方案
你遇到的问题其实是浏览器对window.location.href的默认处理导致的——它会自动对URL中的编码字符(比如%2F、%3D)进行解码,所以拿到的hash部分已经是转义后的可读格式,但我们需要保留原始的编码状态。下面给你几个可靠的解决方案,以及你关心的安全性问题解答:
最直接的解决方案:使用document.URL
- 这个浏览器原生属性会直接返回地址栏里的完整原始URL,完全保留所有编码字符,和你输入的URL完全一致。你测试的
$(document)[0].URL本质上就是调用了原生的document.URL,jQuery只是做了DOM元素的包装,核心还是这个原生属性。 - 举个例子,针对你给出的URL:
原始地址:
http://example.com/report#title=example_report&url=project_chart%2F%3Fproject_id%3D77
使用document.URL获取到的结果和原始地址完全相同,不会把%2F转成/、%3D转成=。
关于document.URL的安全性
完全不用担心安全问题!document.URL是W3C标准定义的DOM属性,所有主流浏览器(Chrome、Firefox、Safari、Edge等)都支持,它和window.location.href一样,是浏览器直接提供的当前页面URL信息,没有任何安全风险,也不会引入第三方代码的隐患。
备选方案:document.documentURI
如果需要兼容一些非常老旧的浏览器(现在几乎很少见了),可以用document.documentURI,它的作用和document.URL基本一致,同样能返回未解码的完整URL字符串。
为什么window.location.href不行?
因为window.location的子属性(比如hash、search)在被访问时,浏览器会自动进行URL解码,所以拼接后的href自然就是解码后的结果。而document.URL是直接读取浏览器保存的原始URL字符串,不会做任何解码处理,这就是两者的核心区别。
内容的提问来源于stack exchange,提问作者saleh mosleh
相关产品推荐
相关产品推荐

