可通过document.currentScript获取当前script元素并用getAttribute或dataset读取data-*属性,兼容IE需加id后用getElementById;适合传静态配置,敏感信息勿使用。

可以在 <script> 标签上直接添加 data-* 自定义属性,然后在脚本内部通过 document.currentScript 获取当前执行的 script 元素,再用 getAttribute() 读取参数值。这是最轻量、无需额外 DOM 查询的方式。
获取当前 script 元素
document.currentScript 返回正在执行的 <script> 元素(注意:不支持 IE),是定位自身最准确的方法:
<script data-api-url="https://api.example.com" data-timeout="5000">
const script = document.currentScript;
const apiUrl = script.getAttribute('data-api-url');
const timeout = parseInt(script.getAttribute('data-timeout'), 10);
console.log(apiUrl, timeout); // https://api.example.com, 5000
</script>兼容 IE 的备选方案
如果需支持 IE(currentScript 不可用),可给 script 加 id 或利用 document.scripts 反向查找:
- 推荐加
id后用document.getElementById获取(简单可靠) - 或遍历
document.scripts,匹配src或内联内容特征(适合无 id 场景)
例如:
<script id="my-widget" data-theme="dark" data-user-id="123">
const script = document.getElementById('my-widget');
const theme = script.dataset.theme; // dataset 是更简洁的写法
const userId = script.dataset.userId;
</script>使用 dataset 简化读取
element.dataset 自动将 data-foo-bar 映射为 fooBar 驼峰形式,比 getAttribute 更直观:
-
data-api-key→dataset.apiKey -
data-user-id→dataset.userId - 注意:dataset 值始终是字符串,数字/布尔需手动转换
注意事项与建议
这种传参方式适合配置类静态参数,不适用于动态或大量数据:
- 避免在多个同类型 script 中混用,容易误读(建议配合唯一 id 或注释)
- 不要依赖 script 的执行顺序来推断位置(如
document.scripts[document.scripts.length - 1]不可靠) - 敏感信息(如 token)不应放在 data 属性中,可能被爬虫或调试工具轻易看到


















