W3C Validator在localhost上由ajax脱机

时间:2016-01-26 15:44:43

标签: javascript w3c w3c-validation adobe-brackets

我用来编写Brackets文本编辑器,我已经安装了W3C验证器,但它在网上工作但不在线。我尝试安装https://validator.w3.org/docs/install.html并运行到localhost:8888但括号的扩展仅通过ajax(javascript)连接。是否可以像原来的W3C网站一样发送ajax?

1 个答案:

答案 0 :(得分:1)

W3C HTML检查程序(验证程序)的维护者。是的,可以将ajax请求发送到当前检查器的本地实例。要使用Fetch执行此操作并获取JSON格式的结果:

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主体提供它是首选(并且更好)的方式。

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

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);
        }
    });
});

如果您想使用老式XHR而不是fetch()或JQuery $.ajax(…),但是在这种情况下如何处理细节还不清楚,请告诉我,我可以发布一个示例那也是。

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

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

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