W3C 验证器在本地主机上离线 ajax

W3C Validator offline on localhost by ajax

我曾经对 Brackets 文本编辑器进行编程,我已经安装了 W3C 验证器,但它在我在线时可以工作,但离线时不行。我尝试安装 https://validator.w3.org/docs/install.html 和 运行 localhost:8888 但括号的扩展仅通过 ajax (javascript) 连接。可以发送 ajax 喜欢到原始 W3C 网站吗?

W3C HTML 检查器(验证器)的维护者。是的,可以向当前检查器的本地实例发送 ajax 请求。要使用 Fetch 执行此操作并返回 JSON-formatted 结果:

var checkerUrl = "http://localhost:8888/?out=json"
fetch(document.location.href)
.then(function(currentDoc) { return currentDoc.text(); })
.then(function(htmlSource) {
    fetch(
        checkerUrl, {
        method: "POST",
        mode: "cors",
        body: htmlSource,
        headers: new Headers({ "Content-Type": "text/html;charset=utf-8" })
    })
    .then(function(checkerResponse) { return checkerResponse.json(); })
    .then(function(jsonOutput) {
        console.dir(jsonOutput.messages);
    })
});

这显示了按照检查员期望的方式传送请求的基本步骤:

  • 将文档作为 POST 的正文发送给检查器(在本例中为当前文档)
  • 告诉检查器将其结果格式化为 JSON (out=json)
  • text/html;charset=utf-8 设为您发送给检查器的 POST 正文的媒体类型

检查器还支持 multipart/form-data 为其提供要检查的 HTML 源,但将源作为 POST 正文提供是首选(也是更好)的方式因为这样做。

如果您想使用 JQuery $.ajax(…) 而不是 fetch(),这里有一个例子:

var checkerUrl = "http://localhost:8888/?out=json"
$.get(document.location.href,
function(htmlSource)
{
    $.ajax({
        url: checkerUrl,
        type: "POST",
        crossDomain: true,
        data: htmlSource,
        contentType: "text/html;charset=utf-8",
        dataType: "json",
        success: function (jsonOutput) {
            console.dir(jsonOutput.messages);
        }
    });
});

并且如果您想使用 old-school XHR 而不是 fetch() 或 JQuery $.ajax(…) 但不清楚在这种情况下如何处理细节,让我知道,我也可以 post 举个例子。

在所有情况下,.messages JSON 输出是一个对象数组,每个对象包含如下内容:

firstColumn: 1
lastColumn: 6
lastLine: 4
message: "Unclosed element “span”."
type: "error"

The documentation for the checker JSON format 提供了检查器发出的 JSON 的更多详细信息。