IE11中使用holder.js和AngularJS破坏图像的占位符失败

时间:2014-11-16 00:35:42

标签: angularjs internet-explorer-11 holder.js

我尝试使用AngularJS框架中的holder.js为破碎的图像设置占位符。

一切都适用于所有浏览器,除了IE11(多么令人惊讶!),这给了我一个奇怪的“无效属性值”错误...我甚至没有测试旧版本的IE。

所以,它适用于:

  • 我直接在"holder.js/100%x100%"属性中使用src(没有附加指令)
  • 我使用"holder.js/100x100"作为破碎图片的占位符

但在以下情况下失败:

  • 我直接在"holder.js/100%x100%"使用data-ng-src而不是src(=>无效参数)
  • 我使用"holder.js/100%x100%"作为损坏图片的占位符(=>无效的属性值)

经过一些其他测试(使用jQuery或纯javascript),我发现错误不是来自holder.js。我认为在编程上在src / ngSrc属性中使用%字符时IE11存在问题...但我不知道为什么我是对的。


以下是四个用例的小提琴:

http://jsfiddle.net/msieurtoph/184fseew/

如果有人知道让它运作的原因或方法。

谢谢你的帮助......


编辑:

感谢@imsky,这是一个工作小提琴,使用data-src代替srchttp://jsfiddle.net/msieurtoph/184fseew/23/

1 个答案:

答案 0 :(得分:1)

这是IE11的一个已知错误,在img.src中使用%会引发错误:https://connect.microsoft.com/IE/feedback/details/997939/ie11-imageelement-setattribute-fails-with-invalid-argument-when-key-is-src-and-value-has-a-percent

此处有两种解决方案,具体取决于您是否需要设置src属性。第一个是使用data-src而不是src

$timeout(function() {
     _this.setAttribute('data-src', holderSrc)
     Holder.run({
         images: _this,
         nocss: true
     });
 });

这是一个更清洁的解决方案,我建议使用。

另一种解决方案是使用具有正确src属性值的克隆替换该元素。如果您需要维护对原始图像元素的引用,则此方法不是很干净并且会引入开销。如果需要正确设置src属性,我建议您这样做。