我有一个用coffeescript编写的函数,它曾经工作正常,但现在在ie8中抛出一个'Invalid Pointer'异常。
咖啡脚本
convertSVGforIE = ->
if not $.support.svg or device.ff36
imagesToConvert = $('img.SVG')
imagesToConvert.each ->
imageSrcMinus = this.src.substr 0, this.src.length - 3
this.src = imageSrcMinus + 'png'
Javascript
convertSVGforIE = function() {
var imagesToConvert;
if (!$.support.svg || device.ff36) {
imagesToConvert = $('img.SVG');
return imagesToConvert.each(function() {
var imageSrcMinus;
imageSrcMinus = this.src.substr(0, this.src.length - 3); //Invalid pointer
return this.src = imageSrcMinus + 'png';
});
}
};
我看不出我的剧本有什么问题。请帮我确定一下ie8的问题是什么。
更新: 我让这个工作,但不是很好的
convertSVGforIE = ->
if not $.support.svg or device.ff36
$('img.SVG').each ->
that = $(this)
imageSrcMinus = that.attr('src').substr 0, that.attr('src').length - 3
that.attr 'src', imageSrcMinus+'png'
以上脚本有效,但为什么$(this).attr('src')有效?虽然this.src没有?为什么只在IE?
答案 0 :(得分:4)
实际上IE的所有版本都支持图像的.src属性。 MSDN文档很混乱,因为它似乎暗示该属性仅在IE8或更高版本中受支持;但那是错的。
但是,当您尝试读取数据URI大于4K的图像的.src时,IE8中会出现无效指针错误。 http://support.microsoft.com/kb/2688188记录了此错误,建议的修复方法是更新浏览器。
但是有一个简单的解决方法,即在图像属性集合中引用SRC,即代替:
img.src
使用它:
img.attributes.src.value
答案 1 :(得分:3)
如果你看http://msdn.microsoft.com/en-us/library/ms534643(v=vs.85).aspx,就说
elem.src
如果您查看该页面上的评论,还有其他的怪癖..
使用jQuery肯定是最简单的解决方案,具有IE6-7兼容性的令人愉快的副作用,但您可能还想尝试添加
<meta http-equiv="X-UA-Compatible" content="IE=8" />
到页面的头部,强制IE8进入标准模式。