0

У нас есть куча форм на нашем интранете кодируемых IE9, которые содержат код, подобный этому:JavaScript Прототип недвижимости Зеркало Другой недвижимости

var dept = req.responseXML.selectNodes("//Dept")[0].text; 

Мы просто модернизированный всех наших ПК на IE10 и SelectNodes в настоящее время устарели и был заменен querySelectorAll, поэтому исправленный бит кода будет:

var dept = req.responseXML.querySelectorAll("Dept")[0].textContent; 

Все эти формы используют общий файл JS для отправки запросов так, я думал, что если я мог бы определить некоторые функции прототипа/свойства я мог бы это исправить несовместимость, не касаясь каждой формы , Я сделал некоторый прогресс и был в состоянии сопоставить SelectNodes с querySelectorAll помощью:

Document.prototype.selectNodes = function(param) { 
    return this.querySelectorAll(param.replace("//", "")); 
} 

Однако сейчас я бегу в проблемы отображения текста в TextContent. Далее, кажется, не работает:

Element.prototype.text = function() { 
    return this.textContent; 
}; 

Если у кого есть какие-либо adivce я бы очень признателен, я действительно не хочу, чтобы отслеживать все эти формы вниз. Благодаря!

ответ

0

Кажется, что вы должны исправить свой код, а не взламывать методы DOM, чтобы избежать исправления кода. Представьте, как это происходит со временем, и ваш код становится все дальше и дальше от программирования до стандартного DOM, а затем в какой-то момент вы, вероятно, даже столкнетесь с именем, которое изменится в браузере.

Если вы хотите, чтобы взломать код, так что elem.text возвращает elem.textContent, то потому, что эти свойства ссылки, а не вызов функции вам необходимо использовать поглотитель, как это:

Object.defineProperty(HTMLElement.prototype, "text", { 
    get: function() { 
     return this.textContent || this.innerText; 
    }, 
    set: function(txt) { 
     if (this.textContent) { 
      this.textContent = txt; 
     } else { 
      this.innerText = txt; 
     } 
    } 
}); 
+0

Это было решение! Ваши советы верны, однако моя среда требует, чтобы старый IE9-код все еще функционировал в IE10. –

+0

@ JaredFeldman - лучший способ справиться с совместимостью для старых браузеров - это изменить свой код, чтобы использовать новый интерфейс (для работы в новых браузерах), а затем добавить полиполк для старых браузеров. Это сохраняет стандарт вашего кода, предотвращает конфликты в будущем, потому что вы используете только стандартные свойства в своем коде и заставляете ваш код намного легче понять для тех, кто придет после вас в будущем (потому что он использует известные стандарты). Вы делаете обратное - кодирование старого проприетарного интерфейса и попытка сделать новый браузер все еще реализуемым. – jfriend00

 Смежные вопросы

  • Нет связанных вопросов^_^