javascript - 如何强制在解析html文件时不发送其他请求?

标签 javascript

我正在编写一个 Chrome 扩展程序,它将 GET 请求发送到网站,并开始抓取作为响应返回的 .html 文件。 在查看 chrome DevTool 中的网络部分时,我发现 html 发送了很多无用的(对我来说)请求,因为它们是网页逻辑的一部分。 有没有一种方法可以按原样读取和解析 html 文件,而无需创建所有这些间接请求? 另一个请求的发起者是这一行(正如 chrome 建议的那样):

htmlObject.innerHTML = xhr.responseText;

这是我正在运行的与此问题相关的代码部分:

function makeCall(word) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = processResponse(xhr);
    xhr.open("GET", 'https://school.morfix.co.il/' + word, true);
    xhr.send(null);
}
function processResponse(xhr) {
    return function(){
        if (xhr.readyState == XMLHttpRequest.DONE) {
            var htmlObject = document.createElement('div');
            htmlObject.innerHTML = xhr.responseText;
            var translations = htmlObject.getElementsByClassName("normal_translation_div");
            for (var i=0; i< translations.length; i++){
                var trans = translations[i].innerHTML;
                console.log(trans.replace(/<span class=\"clearOutputLanguageMeaningsString\">; <\/span>/g, ";"));
            }
        }
    }
}

最佳答案

尝试访问xhr.responseXML而不是 responseText。它应该为您提供一个可以执行查询的文档。

如果这不起作用,您可以使用 DOM Parser 而不是创建 DOM 节点。解析响应,如下所示:

const parser = new DOMParser()
const parsedDoc = parser.parseFromString(xhr.responseText, 'text/html')

// now you can use the parsedDoc like a regular document
var translations = parsedDoc.getElementsByClassName("...")

关于javascript - 如何强制在解析html文件时不发送其他请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54270860/

相关文章:

javascript - 你如何改变 jQuery 中元素的填充?

javascript - JQuery/JavaScript - 滚动到附加 div 上的 anchor

javascript - 如何使用 JavaScript 发送请求并接收来自 REST API 的响应?

javascript - 使用 Object.keys 返回整数数组

javascript - 将()插入深层数组

javascript - 检测移动设备 - YouTube JS API

php - 如果用户未登录,如何生成弹出窗口?

javascript - d3.js 矩形特征在 Mollweide 投影中绘制为圆弧

javascript - 解析嵌套的 javascript 数组

javascript - JQuery从列表中获取所有数据属性