*.htc Dateien zum beheben von Browser-Bugs

DataFox

Erfahrenes Mitglied
Hi,

ich bin gerade auf etwas höchst seltsames aufmerksam geworden:

CSS-Notation:
Code:
 img, div { behavior: url(iepngfix.htc) }

JavaScript-Code in *.htc Datei:
Code:
<public:component>
<public:attach event="onpropertychange" onevent="doFix()" />

<script type="text/javascript">

// IE5.5+ PNG Alpha Fix v1.0RC4
// (c) 2004-2005 Angus Turnbull http://www.twinhelix.com

// This is licensed under the CC-GNU LGPL, version 2.1 or later.
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/


// This must be a path to a blank image. That's all the configuration you need.
if (typeof blankImg == 'undefined') var blankImg = 'blank.gif';


var f = 'DXImageTransform.Microsoft.AlphaImageLoader';

function filt(s, m)
{
 if (filters[f])
 {
  filters[f].enabled = s ? true : false;
  if (s) with (filters[f]) { src = s; sizingMethod = m }
 }
 else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
}

function doFix()
{
 // Assume IE7 is OK.
 if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) ||
  (event && !/(background|src)/.test(event.propertyName))) return;

 var bgImg = currentStyle.backgroundImage || style.backgroundImage;

 if (tagName == 'IMG')
 {
  if ((/\.png$/i).test(src))
  {
   if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
    style.width = offsetWidth + 'px';
   filt(src, 'scale');
   src = blankImg;
  }
  else if (src.indexOf(blankImg) < 0) filt();
 }
 else if (bgImg && bgImg != 'none')
 {
  if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i))
  {
   var s = RegExp.$1;
   if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
    style.width = offsetWidth + 'px';
   style.backgroundImage = 'none';
   filt(s, 'crop');
   // IE link fix.
   for (var n = 0; n < childNodes.length; n++)
    if (childNodes[n].style) childNodes[n].style.position = 'relative';
  }
  else filt();
 }
}

doFix();

</script>
</public:component>

Kann mir einer mal erklären was es mit dieser *.htc Geschichte auf sich hat, und ob man damit irgendwelche besonders tollen Sachen anstellen kann, die man mit "normalem" JavaScript nicht hinkriegen würde?

Ist das nur für MSIE oder verstehen alle Browser sowas?

Gruß
Laura
 
Hi,

der behavior-Filter kommt aus dem Hause Microsoft (siehe Introduction to DHTML Behaviors), wird somit ausschliesslich vom IE interpretiert, und stellt keinen Bestandteil der CSS-Spezifikation dar. Mit ihm lässt sich über eine *.htc-Datei ein Verhalten für ein Element beschreiben.

Ein weiteres altbekanntes Beispiel wäre der csshover.htc-Hack für den IE (<7), der die :hover-Pseudoklasse neben dem a-Element für die übrigen HTML-Elemente nicht unterstützt.
 

Neue Beiträge

Zurück