【问题标题】:Image Replacement (JS/JQuery) working in IE but not FF图像替换(JS/JQuery)在 IE 中工作,但不是 FF
【发布时间】:2011-07-16 17:00:37
【问题描述】:

我尝试了多种解决方案来替换损坏的图像(JS 和 jQuery),并且都可以在 IE 上完美运行,但在 FF 中却不行,这是有原因的吗?

图像在 FF 中的处理方式是否不同可能导致这种情况?

JQuery 示例:

$("img").error(function(){
  $(this).unbind("error").attr("src", "nopic.jpg");
});

Javascript 示例:(由 img 标签中的 onError 事件触发)

function noimage(img){
   img.onerror="";
   img.src="nopic.jpg";
   return true; }

这两个示例在 IE 中都能完美运行,但在 FF 中则完全不行。什么给了?

提前致谢!

【问题讨论】:

  • 你安装了firebug吗?检查 firefox 中的 firebug 并查看它在抱怨什么
  • 在 Firefox 中,转到工具 -> 错误控制台。看看你是否找到任何相关的东西。您的代码看起来不错。
  • 我检查了错误控制台,没有发现任何问题。还有其他想法吗?
  • 如果有帮助,当我右键单击损坏的图像并查看源时,它仍然指向原始源。更换根本没有发生。
  • 设置 attr 的代码在 error 函数内部,但是在设置 attr 之前,error 函数正在与选择器解除绑定。有没有其他人认为这是一个潜在的问题?

标签: javascript jquery image


【解决方案1】:

您必须先绑定error 处理程序,设置图像的 src。所以在 HTML 中设置 src 然后通过 JavaScript 绑定它是行不通的。

您可以自己证明这一点:http://jsfiddle.net/4Wcnj/2/

HTML:

<img width=500 id=img height=500 src="missing1">

JavaScript:

// At this point, missing1 is having an error, but no handler set so far

$("#img").error(function() {
    alert("Missing: " + $(this).attr("src"));
});

// The bind handler has been set, now if you set the src wrongly, you
// get the alert
$("img").attr("src", "missing2");

【讨论】:

    【解决方案2】:

    您是通过指向文件 URL 进行本地测试,对吗?

    尝试在实际服务器上进行测试,即使它只是本地服务器。我相信 Firefox 依赖于图像 GET 返回的 HTTP 状态码来触发错误;如果您从 file://... URL 加载,则不涉及服务器,因此您不会收到错误消息。

    来自jQuery API docs for error()

    当页面在本地提供时,此事件可能无法正确触发。由于error依赖于正常的HTTP状态码,如果URL使用file:protocol一般不会触发。

    编辑:正如我们在 cmets 中所讨论的,这似乎是因为由于某种原因,您的 Intranet 服务器没有以 404(或任何其他错误,由事物的声音。)

    因为 Firefox 没有收到错误,所以它不会触发错误处理程序,这看起来很正常。

    我认为您的问题只是“我的服务器不会因缺少内容而返回 404 错误”,但是您可能需要进行更多实验以收集证据,然后再询问(并且可能在 Serverfault 而不是 SO 上询问) ...)

    【讨论】:

    • 我不肯定我明白你的意思。所有文件都存放在我们公司的 Intranet 服务器 (SharePoint) 上。图片的示例 URL 为:http://domain/folder/folder/Online/PublishingImages/images/picture.jpg 您是说这可能是问题所在吗?
    • @Sunburnt 不,显然我的猜测是错误的!只要您实际上有“http://...”开始 URL,那么您应该没问题。如果您在 Firefox 中访问 http://domain/folder/folder/Online/PublishingImages/images/some_missing_broken_image.jpg,您实际上会看到什么?您收到 404 错误吗?
    • 感谢您的帮助!有趣的是,我得到了一个白页,其中只有显示损坏图像 URL 的文本。我在 IE 中收到 404 错误。
    • @Sunburnt 有趣!我想知道这是否重要。如果你指向不同的服务器,你会得到一个 404 页面吗?互联网上一些随机的不存在的图像,比如说?您能在 Firebug 的 Net 选项卡中查看服务器响应吗? Firebug 是否显示 404 状态码?
    • @Matt - 当我尝试在互联网上打开一个随机不存在的图像时,我收到 404 错误。但是,如果我在我们的域中输入任何内容,它会打开一个空白页面,其中包含我提交的 URL。这大概就是问题所在。你能想出任何其他方法来解决这个问题吗?当我在任何这些情况下查看“网络”选项卡时,它都是空白的。
    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2018-10-25
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多