你的问题聚焦于 “前端 JS 所有可能发出 HTTP 请求的原生函数和属性”,而 setAttribute
本身不会直接触发 HTTP 请求,但某些特定属性的修改可能会间接导致浏览器发起请求(如 src
、href
)。以下是完整整理:
原生 JavaScript 中会触发 HTTP 请求的函数/属性
1. 直接发送请求的 API
API | 说明 |
---|---|
fetch(url, options) |
Fetch API,现代标准网络请求方法。 |
new XMLHttpRequest() |
XHR 对象,通过 .open() + .send() 发送请求。 |
navigator.sendBeacon(url, data) |
Beacon API,用于页面卸载时可靠发送数据(如埋点)。 |
new WebSocket(url) |
WebSocket 连接(非 HTTP,但属于网络请求)。 |
new EventSource(url) |
Server-Sent Events (SSE),服务器推送事件。 |
2. HTML/SVG 属性修改触发的请求
以下属性的赋值或修改会自动触发浏览器发起 HTTP 请求:
// Image/Media/IFrame 等资源加载
img.src = "url"; // <img>, <script>, <iframe>, <video>, <audio>
link.href = "url"; // <link> (CSS, prefetch, dns-prefetch)
script.src = "url"; // <script>
iframe.src = "url"; // <iframe>
// CSSOM 相关
document.styleSheets[0].href = "url"; // CSSStyleSheet.href
// SVG (部分元素)
svgElement.setAttribute("href", "url"); // SVG <use>, <image>
svgElement.setAttribute("xlink:href", "url"); // Deprecated xlink:href
3. DOM 方法间接触发请求
以下方法在操作特定属性时会间接触发请求:
element.setAttribute("src", "url"); // 等效于直接赋值 src
element.setAttribute("href", "url"); // 等效于直接赋值 href
关键区别说明
- 直接请求 API(如
fetch
,XHR
)由代码显式调用。 - 属性/Method 触发的请求是浏览器解析到资源依赖时自动发起的(如修改
src
/href
)。 - 不触发请求的情况:普通 DOM 属性(如
id
,class
)或非资源类属性(如data-*
)不会触发请求。
如果需要更具体的场景分析,可以进一步说明需求!
内容由零声教学AI助手提供,问题来源于学员提问