ie8'指针无效'

时间:2012-03-11 21:54:55

标签: javascript jquery internet-explorer internet-explorer-8 coffeescript

我有一个用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?

2 个答案:

答案 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,就说

  1. 您只能从IE8或更高版本以及
  2. 执行elem.src
  3. 具体如何运作取决于您是处于IE8标准模式还是兼容模式。
  4. 如果您查看该页面上的评论,还有其他的怪癖..

    使用jQuery肯定是最简单的解决方案,具有IE6-7兼容性的令人愉快的副作用,但您可能还想尝试添加

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

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