Kai: Zuweisung document.body.innerHTML funktioniert unter IE9 nicht

Hallo!

Ich hab schon mal nach meinem Problem gegoogelt, aber da hörte es sich so an, als ob innerHTML eher vom Standard aufgenommen wurde wie dass es nicht mehr unterstützt wird. Ich versuche meinen Code so anzupassen, dass der Kompatibilitätsmodus nicht aktiviert werden muss.

Ich zeige meine XML-Dateien mit Servlets an, gebe an mein xsl den Suchparameter mit. Wenn der Suchparameter nicht leer ist, rufe ich im Javascript die highlightSearchTerms auf. Es wird auch keine Fehlermeldung angezeigt, aber die Suchbegriffe werden ab IE9 nicht mehr hervorgehoben.

function highlightSearchTerms(searchText, treatAsPhrase, warnOnFailure, highlightStartTag, highlightEndTag)  
{  
  if (treatAsPhrase) {  
    searchArray = [searchText];  
  } else {  
    searchArray = searchText.split(" ");  
  
  var bodyText = parent.frames[4].document.body.innerHTML;  
  for (var i = 0; i < searchArray.length; i++) {  
    bodyText = doHighlight(bodyText, searchArray[i], highlightStartTag, highlightEndTag);  
  }  
  parent.frames[4].document.body.innerHTML = bodyText;  
  return true;  
}  
  
function doHighlight(bodyText, searchTerm, highlightStartTag, highlightEndTag)  
{  
  if ((!highlightStartTag) || (!highlightEndTag)) {  
    highlightStartTag = "<font style='color:blue; background-color:yellow;'>";  
    highlightEndTag = "</font>";  
  }  
  
  var newText = "";  
  var i = -1;  
  var lcSearchTerm = searchTerm.toLowerCase();  
  var lcBodyText = bodyText.toLowerCase();  
  
  while (bodyText.length > 0) {  
    i = lcBodyText.indexOf(lcSearchTerm, i+1);  
    if (i < 0) {  
      newText += bodyText;  
      bodyText = "";  
    } else {  
      // skip anything inside an HTML tag  
      if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i)) {  
        // skip anything inside a <script> block  
        if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i)) {  
          newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, searchTerm.length) + highlightEndTag;  
          bodyText = bodyText.substr(i + searchTerm.length);  
          lcBodyText = bodyText.toLowerCase();  
          i = -1;  
        }  
      }  
    }  
  }  
  return newText;  
}  

Habt ihr einen Tipp für mich?
LG Kai

  1. Hallo!

    Habe selber die Lösung gefunden *freu* :))

    Liegt überhaupt nicht an IE9, sondern an mir selber, hatte nämlich

    var textColor = "22FFFF";
    var bgColor = "2255FF";

    highlightStartTag = "<font style='color:" + textColor + "; background-color:" + bgColor + ";'>";

    verwendet und tatsächlich # vor den Hexcodes vergessen. Mir ist es aufgefallen, als ich mir mal nach dem Setzen von innerHTML diesen nochmal ausgeben hab lassen, dass er font schon gesetzt hat, aber style entfernt hatte, also nur <font>Suchbegriff</font>. Und dann habe ich einfach mal yellow als background-color getestet und dies hatte funktioniert. Oh mann so ein kleiner Fehler kann einen echt lange aufhalten. IE7 und IE8 haben da wohl noch ein paar mehr Programmierfehler erlaubt/durchgelassen.

    Wünsche euch noch einen schönen Tag
    LG Kai