我尝试使用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
代替src
:http://jsfiddle.net/msieurtoph/184fseew/23/
答案 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
属性,我建议您这样做。