无法赋值var i = window.location.href,jQuery 3.3.1赋值异常求助
解决
var i = window.location.href赋值失败的问题 嘿,我之前也碰到过类似的诡异情况,咱们一步步拆解排查,应该能快速定位问题:
先排查最常见的原因
1. 变量名冲突
i是个非常通用的变量名,很可能被其他脚本(或者你自己的代码)提前用const/let定义过,甚至被设置成了不可写的全局变量。试试换个更独特的变量名测试:
var currentPageUrl = window.location.href; console.log(currentPageUrl);
如果换变量名后能正常输出URL,那就是i这个变量名的锅,直接换个名字就行。
2. 执行时机与作用域问题
虽然window.location.href不需要等DOM加载完成,但如果你的代码写在了某个受限的作用域里(比如闭包、jQuery插件的私有作用域),或者在某个异步回调之外提前执行了?可以试试把代码放进jQuery的就绪回调里测试:
$(function() { var i = window.location.href; console.log(i); // 看看控制台输出 });
3. 浏览器环境或安全限制
如果上面的方法都不行,打开浏览器的开发者工具(F12),直接在控制台输入window.location.href:
- 如果控制台能正常输出当前页面URL,说明你的代码里有隐藏的作用域/变量冲突问题;
- 如果控制台也拿不到值,那大概率是浏览器环境的限制:
- 比如页面是通过
file://协议打开的,部分浏览器对本地文件的window.location有安全限制; - 或者页面被嵌入在设置了
sandbox属性的iframe里,限制了对location对象的访问; - 也可能是浏览器插件(比如广告拦截、隐私插件)干扰了location对象的正常访问,可以试试禁用插件后再测试。
- 比如页面是通过
4. 检查是否有脚本篡改了location对象
有些不规范的插件或脚本会通过Object.freeze()、修改属性描述符的方式锁住window.location。你可以在控制台执行这段代码检查:
console.log(Object.getOwnPropertyDescriptor(window.location, 'href'));
正常情况下,输出的对象里writable和configurable应该是true。如果是false,说明有脚本篡改了这个属性的可写性,需要排查页面引入的其他脚本。
总结
90%的概率是变量名冲突或者作用域问题,先从换变量名、控制台直接测试这两步入手,基本能快速解决。如果是浏览器环境限制,就需要调整页面的运行环境(比如用http协议打开,或者修改iframe的sandbox设置)。
内容的提问来源于stack exchange,提问作者abdul qayyum
相关产品推荐
相关产品推荐

