2

我有一个用coffeescript编写的函数,用于正常工作,但现在在ie8中引发'Invalid Pointer'异常。ie8'无效指针'

的咖啡脚本

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' 

以上脚本的工作,但为什么$(本).attr( 'SRC')工作吗?而这个.src不?为什么只在IE浏览器?

+1

将一个断点和看看this.src和this.src.length是什么;在产生错误的线上。 – 2012-03-11 21:57:08

+0

我不确定你的意思是断点。你能把我链接到一些文档吗? – Fresheyeball 2012-03-11 22:08:57

+0

这是另一个堆栈溢出问题,详细介绍IE8中Javascript的调试; http://stackoverflow.com/questions/1306232/how-to-debug-javascript-with-ie-8。至于为什么; – 2012-03-11 23:48:52

回答

3

如果你看一下http://msdn.microsoft.com/en-us/library/ms534643(v=vs.85).aspx,它说,

  1. 你只能做elem.src从IE8或更高版本,以及
  2. 具体的工作方式取决于你是否是在IE8标准模式或兼容模式。

如果你看一下该网页上的评论,还有其他怪癖以及..

使用jQuery无疑是最简单的解决这里,与IE6-7兼容性宜人的副作用,但你也可以尝试加入

<meta http-equiv="X-UA-Compatible" content="IE=8" /> 

到页面的头部强制IE8进入标准模式。

4

实际上,所有版本的IE都支持图像的.src属性。该MSDN文档相当混乱,因为它似乎暗示该属性仅在IE8或更高版本中受支持;但那是错误的。

但是,当您尝试读取数据URI大于4K的图像的.src时,IE8中会出现无效指针错误。此错误记录在http://support.microsoft.com/kb/2688188,推荐的修复方法是更新浏览器。

但有一个简单的解决方法,这是指SRC图像中的属性集,即不是这样的:

img.src 

使用本:

img.attributes.src.value