Baseline Widely available *
W3C XMLHttpRequest
è§è为 XMLHttpRequest
æ·»å HTML è§£æåè½ï¼æ¤åå®ä»
æ¯æ XML è§£æã该åè½å
许 Web åºç¨ç¨åºä½¿ç¨ XMLHttpRequest
è·å¾å·²è§£æç DOM å½¢å¼ç HTML èµæºã
è¦äºè§£å¦ä½ä½¿ç¨ XMLHttpRequest
ï¼è¯·åé
ä½¿ç¨ XMLHttpRequestã
为äºé»æ¢åæ¥ä½¿ç¨ XMLHttpRequest
ï¼HTML æ¯æå¨åæ¥æ¨¡å¼ä¸æ¯ä¸å¯ç¨çãå¦å¤ï¼åªæå½ responseType
屿§è¢«è®¾ç½®ä¸º "document"
æ¶ï¼æä¼æ HTML æ¯æãè¿ä¸éå¶é¿å
äºå½éç代ç å¨é»è®¤æ¨¡å¼ä¸ä½¿ç¨ XMLHttpRequest
æ¥æ£ç´¢ responseText
ï¼å¯¹ text/html
èµæºè¿è¡æ ç¨çè§£æè浪费æ¶é´ãåæ¶ï¼è¿ä¸ªéå¶ä¹é¿å
äºéç代ç çé®é¢ï¼è¿äºä»£ç åå® responseXML
å¯¹äº HTTP é误页é¢ï¼é常æä¸ä¸ª text/html
ååºä½ï¼æ¯ null
ã
ä½¿ç¨ XMLHttpRequest
æ£ç´¢ä½ä¸º DOM ç HTML èµæºï¼å°±åä½¿ç¨ XMLHttpRequest
æ£ç´¢ä½ä¸º DOM ç XML èµæºä¸æ ·ï¼åªæ¯ä½ ä¸è½ä½¿ç¨åæ¥æ¨¡å¼ï¼ä½ å¿
é¡»å¨è°ç¨ open()
ä¹åï¼send()
ä¹åï¼å°å符串 "document"
åé
ç» responseType
对象ç屿§ï¼æ¥æç¡®è¯·æ±ä¸ä¸ªææ¡£ã
const xhr = new XMLHttpRequest();
xhr.onload = () => {
console.log(xhr.responseXML.title);
};
xhr.open("GET", "file.html");
xhr.responseType = "document";
xhr.send();
ç¹æ§æ£æµ æ¹æ³ 1
è¯¥æ¹æ³ä¾èµäºåè½çâ强å¶å¼æ¥âæ§è´¨ãå½ä½ è¯å¾è®¾ç½® XMLHttpRequest
对象ç responseType
æ¶ï¼å®ä»¥âåæ¥âæ¹å¼æå¼ãè¿å¨å®ç°è¯¥åè½çæµè§å¨ä¸ä¼åºç°é误ï¼èå¨å
¶ä»æµè§å¨ä¸åå¯ä»¥æ£å¸¸å·¥ä½ã
function HTMLinXHR() {
if (!window.XMLHttpRequest) {
return false;
}
const req = new window.XMLHttpRequest();
req.open("GET", window.location.href, false);
try {
req.responseType = "document";
} catch (e) {
return true;
}
return false;
}
è¿ç§æ¹æ³æ¯åæ¥çï¼ä¸ä¾èµå¤é¨èµæºï¼å°½ç®¡å®å¯è½ä¸åä¸é¢æè¿°çæ¹æ³ 2 飿 ·å¯é ï¼å 为å®ä¸æ£æ¥å®é åè½ï¼èæ¯æ£æ¥è¯¥åè½çæç¤ºã
æ¹æ³ 2å¨ XMLHttpRequest
ä¸åç¡®æ£æµä¸ä¸ªæµè§å¨æ¯å¦æ¯æ HTML è§£ææä¸¤ä¸ªææãé¦å
ï¼æ£æµç»ææ¯ä»¥å¼æ¥æ¹å¼è·å¾çï¼å ä¸ºåªæå¨å¼æ¥æ¨¡å¼ä¸ææ HTML æ¯æãå
¶æ¬¡ï¼ä½ å¿
é¡»éè¿ HTTP å®é
è·åä¸ä¸ªæµè¯ææ¡£ï¼å ä¸ºç¨ data:
URL è¿è¡æµè¯ï¼æç»ä¼åæ¶æµè¯ data:
URL æ¯æã
å æ¤ï¼ä¸ºäºæ£æµ HTML æ¯æï¼æå¡å¨ä¸éè¦ä¸ä¸ªæµè¯ HTML æä»¶ãè¿ä¸ªæµè¯æä»¶å¾å°ï¼å ¶ XML æ ¼å¼ä¸æ¯å¾å®æ´ï¼
妿æä»¶å为 detect.html
ï¼ä»¥ä¸åè½å¯ç¨äºæ£æµ HTML è§£ææ¯æï¼
function detectHtmlInXhr(callback) {
if (!window.XMLHttpRequest) {
setTimeout(function () {
callback(false);
}, 0);
return;
}
let done = false;
const xhr = new window.XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && !done) {
done = true;
callback(
!!(
xhr.responseXML &&
xhr.responseXML.title &&
xhr.responseXML.title === "&&<"
),
);
}
};
xhr.onabort = xhr.onerror = () => {
if (!done) {
done = true;
callback(false);
}
};
try {
xhr.open("GET", "detect.html");
xhr.responseType = "document";
xhr.send();
} catch (e) {
setTimeout(function () {
if (!done) {
done = true;
callback(false);
}
}, 0);
}
}
åæ° callback
æ¯ä¸ä¸ªå½æ°ï¼å¦æ HTML è§£ææ¯æ¯æçï¼åå°ä»¥ true
ä½ä¸ºå¯ä¸åæ°è¢«å¼æ¥è°ç¨ï¼å¦æä¸æ¯æ HTML è§£æï¼å为 false
ã
å¦æå¨ HTTP Content-Type
æ 头ä¸å£°æäºå符ç¼ç ï¼å使ç¨è¯¥å符ç¼ç ãå¦åï¼å¦æåå¨åèé¡ºåºæ è®°ï¼å使ç¨ç±åèé¡ºåºæ è®°æç¤ºçç¼ç ãå¦åï¼å¦æåå¨ <meta>
å
ç´ å£°ææä»¶çå 1024 个åèä¸çç¼ç ï¼å使ç¨è¯¥ç¼ç ãå¦åï¼æä»¶è¢«è§£ç 为 UTF-8ã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4