Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 修复IE漏洞:总是一个好主意?_Javascript_Internet Explorer_Dom - Fatal编程技术网

Javascript 修复IE漏洞:总是一个好主意?

Javascript 修复IE漏洞:总是一个好主意?,javascript,internet-explorer,dom,Javascript,Internet Explorer,Dom,Internet Explorer在过去3年中有了很大的改进,自从IE 10成为一款性能相当不错的浏览器以来。但是,即使有了这些改进,web开发人员仍然必须: 处理旧版本,特别是IE8甚至IE7 解决IE一直拖到现在的bug,比如,删除或contentEditable元素时未触发的、或oninput事件 我在问自己,这些变通办法的“可接受”限度是多少。例如,IEA是一个很好的问题,但可能不适合这样做。我甚至不确定你在问什么。如果您需要支持IE版本X,那么除了使其在该版本及更高版本中工作之外,肯定

Internet Explorer在过去3年中有了很大的改进,自从IE 10成为一款性能相当不错的浏览器以来。但是,即使有了这些改进,web开发人员仍然必须:

  • 处理旧版本,特别是IE8甚至IE7
  • 解决IE一直拖到现在的bug,比如,删除或
    contentEditable
    元素时未触发的、或
    oninput
    事件

  • 我在问自己,这些变通办法的“可接受”限度是多少。例如,IEA是一个很好的问题,但可能不适合这样做。我甚至不确定你在问什么。如果您需要支持IE版本X,那么除了使其在该版本及更高版本中工作之外,肯定别无选择。或者您正在询问是否可以放弃对旧IE的支持?仅供参考,对于您的
    .innerHTML
    修复,可能最好获取属性描述符,将
    get
    缓存在变量中,并让新的
    get
    调用缓存的属性描述符。比使用正则表达式更简洁。我不明白为什么这个问题以“主要基于意见”结束。我想问的是,可能会有任何问题。这无异于询问扩展
    Object.prototype
    是否是个好主意。这几乎不是基于意见的。你们中有多少人真正重新定义了
    ,你们遇到了什么问题@Juhana我想问的是,是否最好依赖一些更抽象的方法,比如
    setValue
    setInnerHTML
    之类的东西,这些方法必须在IE7及更低版本中采用。我提出的解决方案不可能是唯一的,不是吗?你的问题似乎开始问什么是可以接受的WRT修复旧的或当前的IE bug。这是一个意见问题,取决于具体情况。最后你会问一些潜在的问题。也许你可以把问题的措辞改得更集中。。。扩展
    Object.prototype
    是否是一个好主意的问题绝对是一个意见问题。
    (function() {
        var re = /^<SELECT(?: [\w:]+=(?:\S+|'[^']*'|"[^"]*"))*>/,
            div = document.createElement("div");
        Object.defineProperty(HTMLSelectElement.prototype, "innerHTML", {get: function() {
            var out = this.outerHTML, m = out.match(re);
            return m ? out.slice(m[0].length, -9) : "";
        }, set: function(v) {
            this.innerText = "";
            if (v = String(v)) {
                div.innerHTML = "<select>" + v + "</select>";
                var s = div.firstChild;
                while (s.firstChild) this.appendChild(s.firstChild);
            }
        }});
    })();
    
    Object.defineProperty(HTMLSelectElement.prototype, "value", {get: function() {
        var opt = this.selectedIndex >= 0 ? this.options[this.selectedIndex] : null;
        return opt ? opt.value : "";
    }, set: function(val) {
        val = String(val);
        var ops = this.options, i = ops.length;
        while (i--) if (ops[i].value === val) break;
        this.selectedIndex = i;
    }});