通过SCRIPT标签加载的脚本中document.currentScript.getAttribute报Null错误
问题原因与解决办法
- 问题根源:
document.currentScript的生效时机是脚本正在执行的过程中,你却把它放在了window.load事件的回调函数里。当load事件触发时,页面所有资源(包括当前脚本)都已经加载执行完毕,浏览器会将document.currentScript重置为null,这时候调用getAttribute自然会抛出TypeError。 - 其他脚本正常运行的原因:那些能正常工作的脚本,是把
document.currentScript直接写在脚本的顶层作用域里——在脚本加载执行的瞬间,document.currentScript指向当前脚本元素,所以能正确获取到src属性。 - 修复方案:
- 把获取脚本路径的代码移到脚本顶层,不要包裹在
load回调中:// 脚本顶层直接获取,此时脚本正在执行,currentScript有效 const _LeadLife_InputMask_Engine_SCRIPTSOURCE = document.currentScript.getAttribute('src'); window.addEventListener("load", (event) => { console.log('jQuery Mask Plugin v1.14.16 initializing inline as part of LeadLife_InputMask_Engine initialization'); console.log('_LeadLife_InputMask_Engine_SCRIPTSOURCE = ' + _LeadLife_InputMask_Engine_SCRIPTSOURCE); }); - 如果业务逻辑要求必须在
load回调中使用这个路径,可以先在顶层把值存入全局变量或闭包,再在回调里引用。
- 把获取脚本路径的代码移到脚本顶层,不要包裹在
内容的提问来源于stack exchange,提问作者David A. Gray
相关产品推荐
相关产品推荐

