Microsoft listens
Wednesday, 5. March 2008, 19:01:13
Sunday, 16. December 2007, 15:38:02
Wednesday, 16. May 2007, 14:36:11
Saturday, 17. February 2007, 17:14:00
// Cross-browser implementation of element.addEventListener()
function addEventListener(element, type, expression, bubbling) {
bubbling = bubbling || false;
if (window.addEventListener) { // Standard
element.addEventListener(type, expression, bubbling);
return true;
} else if (window.attachEvent) { // IE
element.attachEvent('on' + type, expression);
return true;
} else return false;
}if (window.addEventListener) { // StandardFriday, 12. January 2007, 00:53:29
Tuesday, 19. September 2006, 01:30:00

// browser sniffing workaround - walking in through the back door
if( location.href.indexOf( '/dc/system_requirements?browser=blocked' ) >-1){
location.href='/dc/launch?sysreq=ignore';
}
if( top.location.href.indexOf('/dc/launch')>-1 ){
// Gecko compatibility library uses defineGetter and defineSetter. We need to fake them.
//* Patch below is required but causes trouble..
Object.prototype.__defineGetter__= function(){}
Object.prototype.__defineSetter__= function(){}
// IEism called loadXML, basically a DOMParser / DOMLS equivalent
// must handle XML fragments without root element!
Element.prototype.loadXML=function(s){
try{
var d=new DOMParser().parseFromString(s, 'text/xml');
}catch(e){ // DOMParser could not parse fragment, probably because of missing single root element. Workaround time..
var d=document.implementation.createDocument('', this.tagName, null), el=d.createElement('el');
//?? why did I use this.tagName there?
el.innerHTML=s;
for(var i=0 ; i<el.childNodes.length;i++){
d.appendChild(el.childNodes[i].cloneNode(true));
}
}// faking IE-style XML element DOM - separate documents with documentElement within the main doc's DOM
this.documentElement=d.documentElement||d.firstChild;
//?? firstChild is probably leftover from earlier versions using documentFragment?
this.XMLDocument=d;
// address book loading checks .parseError.errorCode
this.XMLDocument.parseError={ 'errorCode':0 };
return d;
}
// some method called isSameNode is called. Not sure where it comes from but simple enough to fake..
Element.prototype.isSameNode = function(n){
return n===this;
}// selectSingleNode support
var realSelectSingleNode=function( expr, resolver ){
var result=(this.ownerDocument?this.ownerDocument:this).evaluate( expr+'[1]', this, resolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null );
return ( result && result.snapshotLength ) ? result.snapshotItem(0) : null;
}
Node.prototype.selectSingleNode = function (expr, resolver)
{
if (!resolver)
if (this.nodeType == Node.DOCUMENT_NODE){
resolver = document.createNSResolver (this.documentElement);
}else if(this.nodeType == Node.ELEMENT_NODE && this.ownerDocument && this.ownerDocument.documentElement ){
resolver = document.createNSResolver (this.ownerDocument.documentElement);
}else{
resolver = document.createNSResolver (this);
}
return realSelectSingleNode.apply (this, [expr, resolver]);
}
opera.addEventListener('BeforeScript', function(e){
// This is the riskiest patch
// Fixing typo: missing ' after attribute value
e.element.text=e.element.text.replace( /\):\(">"\)\),/, "):(\"'>\"))," );
e.element.text=e.element.text.replace( / id='_test_add_folder>/, " id='_test_add_folder'>" );// WebForms2 problem: button attribute "action" is a URL in WF2 e.element.text=e.element.text.replace( /\.(action\b)/g, ".js$1" );
// send button not working - attribute nodes must be in the document they will be used e.element.text=e.element.text.replace( /(\w)\.setAttributeNode\((\w)\)/, "$1.setAttributeNode($1.ownerDocument.importNode($2, true))" );
// workaround for getting the documentElement.xml markup e.element.text=e.element.text.replace( /(([\w\.]*)documentElement).xml/g, "(document.implementation.createLSSerializer()).writeToString($1)" );
// for...in on objects run into our faked __defineGetter__ and __defineSetter__
// we try to add an exception to any for...in loops
e.element.text=e.element.text.replace( /(for\((var |)(\w*) in \w*\)\{)/g, "$1if($3.match(/^__define/))continue;" );
function foo(obj){
for( p in obj )return false; return true
}
var bar = {}; if(!foo(bar)) return;// To: / CC: autocomplete fails // we support IE's TEXTAREA.createTextRange but unfortunately not its boundingLeft property. Improving object detection.. if(e.element.src&&e.element.src.match(/ac\.js$/))e.element.text=e.element.text.replace( /if \( editCtrl\.createTextRange \)/, "if ( editCtrl.createTextRange && editCtrl.createTextRange().boundingLeft )" );
// Preferences not read correctly from XML attributes // IE has an attribute node .text property. .nodeValue will work in Opera.. e.element.text=e.element.text.replace( /\.selectNodes\((\w*)\);\s*\}return\((\w*)\.length\)\?(\w*)\[0\]\.text:/g, ".selectNodes($1);}return($2.length)?$2[0].nodeValue:" );
// We throw an unwanted exception if both arguments to insertBefore are the same node e.element.text=e.element.text.replace( /var (\w*)=(\w*)\?(\w*)\.nextSibling:(\w*)\.firstChild;\s*(\w*)\.insertBefore\((\w*),(\w*)\);/, "var $1=$2?$2.nextSibling:$4.firstChild;if($6!=$1) $4.insertBefore($6,$1);" );
// Opera 9.00 and 9.01 has a bug that means createContextualFragment on table elements is unreliable
// easily the worst patch.. but then it works around a really tricky bug..
if( navigator.userAgent.indexOf('9.01')>-1 || navigator.userAgent.indexOf('9.00')>-1 ){
// UA detection to target specific bug in specific version is OK
e.element.text=e.element.text.replace( /(\b(\w*)\.selectNodeContents\((\w*)\);\s*var (\w*)=(\w*).createContextualFragment\((\w*)\))/, "if($3.tagName=='TBODY'||$3.tagName=='TR'){ $2.createContextualFragment=function(s){var n=s.match(/<(\\w*)/)[1]; var e=document.createElement('div');e.innerHTML='<table><tbody>'+s+'</tbody></table>';return e.getElementsByTagName(n)[0]; } }$1" ); }
}, false)
// No scrollbars appear for message list..
// uses an "overflow" CSS property to control scrollbars. e.overflow="-moz-scrollbars-vertical", and some odd clipping as well..
document.addEventListener( 'load', function(){ setTimeout( function(){ var divs=document.getElementsByTagName('div');for(var i=0,div;div=divs[i];i++)if(div.className&&div.className.indexOf('fakeScrollBar')>-1){div.style.overflow='auto';div.style.clip='auto';}},500);}, false );// redraw problem hides To: field in compose screen
document.addEventListener( 'load',
function(){ if(top.document.frames['newmessage']){
setTimeout( function(){try{top.document.frames['newmessage'].document.body.className+=' ';}catch(e){}},1000);
}}, true);// sluggish performance due to unintended event capture
(function(ael){
window.addEventListener = function(type, func, capture){ ael.call(window, type, func, false); }
})(window.addEventListener);opera.postError( 'Yahoo mail patched' ); } }
Saturday, 22. July 2006, 15:34:29
<table class="fullwidth" id="hometable" style="clear: both; visibility:hidden;">
<!--[if IE ]> <div id="loadMessage" style="position: absolute; z-index: 2; top:180px; background: url(/img/elements/anim_please_wait.gif) no-repeat center; width: 100%; text-align: center; height: 17px;" ></div> <![endif]-->
(document.getElementById("loadMessage")).style.display = "none";Thursday, 5. January 2006, 06:13:23
Showing posts 1 - 8 of 11.
That's good to know. Takk skal du ha! So I should check the list ...
That's a good question and I'm not even sure. Of course the debu ...
Where will the next Dragonfly release be announced? I have signe ...
(BTW please use Dragonfly with 9.5 beta 2 and not with the lates ...
I am OT and please dont get mad, but you really should buy a 2nd ...
I was afraid that opera would make Dragonfly a new window. I rea ...