Javascript 当jQuery解析html时-Chrome抛出net::ERR_文件未找到 这是我的密码:

Javascript 当jQuery解析html时-Chrome抛出net::ERR_文件未找到 这是我的密码:,javascript,jquery,html,google-chrome,google-chrome-devtools,Javascript,Jquery,Html,Google Chrome,Google Chrome Devtools,var some_HTML_string=”“; log(“即将调用$.parseHTML”); $.parseHTML(一些HTML字符串) log(“我刚刚调用了$.parseHTML”) 为什么会发生这种情况 使用时,所有HTML都会在文档的DOMNodes中解析 所以 结果是 var img = document.createElement("img"); img.src = "animage.png"; // start loading image 如何避免这种情况 加载映像时,无

var some_HTML_string=”“;
log(“即将调用$.parseHTML”);
$.parseHTML(一些HTML字符串)
log(“我刚刚调用了$.parseHTML”)

为什么会发生这种情况

使用时,所有HTML都会在文档的DOMNodes中解析

所以
结果是

var img = document.createElement("img");
img.src = "animage.png"; // start loading image

如何避免这种情况

加载映像时,无法阻止在控制台中显示错误

正如您在文章中所述,图像的所有相对路径都无法工作,因此您唯一的解决方案是用空图像替换这些相对路径

var htmlString='1〕\
\
';
htmlString=htmlString.replace(/(img[^>]+src=(?:“|”)([^\/][^']+)/g,“$1/:0”);
$.parseHTML(htmlString)

您可以将问题简化为“当图像源中断时,我可以抑制404错误吗?”

答案是,您可以附加一个处理程序
,但它总是在404错误后被调用,无法避免

这正是
.parseHTML
所做的,在您的例子中,它调用
jQuery.buildFragment
,它将从给定字符串创建元素树。 它使用
innerHTML
将元素加载到默认或自定义上下文中

实现目标的唯一方法是在解析字符串之前检测图像,尝试通过请求将图像加载到服务器端脚本,服务器端脚本将处理尝试并返回图像或默认图像。

现在我了解了情况,可以提供答案

如果字符串看起来是HTML代码段,jQuery将尝试创建新的DOM元素,如HTML代码所述

在这里:

html=html.replace(/]*>/g,”)

(使用一些聪明的regexp删除图像标记)

这看起来像是一场艰苦的战斗——我必须:

  • 通过regexp查找图像
  • 知道哪些是正确的
  • 提取属性
所有这些都不需要使用方便的解析方法



仍然不确定为什么错误只出现在Chrome中-请参阅我的评论:

您是通过在Chrome中打开(双击)一个
.html
文件来加载(并开发)这个错误,还是使用web服务器来加载html和js?这只是为了测试环境?当你知道一个图像标签的html文件不存在时,你为什么要尝试解析它呢?为什么不直接注释掉这一行,直到您将文件推送到一个将存在该文件的生产环境?我不明白您在这里想要实现什么。
$.parseHTML(一些HTML字符串)
为什么要这样做?如果要使用
.append()、.prepend()、appendChild()、innerHTML、.html()
等将此字符串放入DOM中,则可以使用。浏览器可以有效地完成这项工作。在生产中,我将获得一些远程HTML。我将解析它。我想要实现什么?在控制台中避免红色+更好地了解发生了什么。这可以通过异常处理来解决。我的意思是,如果该项可用,则加载它,否则为其添加一些伪html。我实际上查看了文档--“如果字符串似乎是html片段,jQuery会尝试创建html所描述的新DOM元素”-我仍然不明白为什么其他浏览器不会抛出错误。。。(或者他们扔了,但我找不到)@MichalStefanow刚刚在FF上测试了一下,我得到了同样的404,没有找到error@MichalStefanow您应该看到
https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js 200好的
至少当我转到“网络”选项卡时,我看到jquery.min.js,实际上是304(未修改)。。。关键是:没有红色404:/