kkapsner
Super Moderator
Hi Leute!
Da ich meine Testseite für das Problem des fehlenden window.Element in IE<8 schon in einem anderen Thread (http://forum.jswelt.de/javascript/50261-js-dateien-laden-index-html-scr-variable-4.html#post315904 - Testseite: http://kkjs.kkapsner.de/tests/Element.prototype.html) gepostet habe wollte ich jetzt doch mal einen extra Thread dazu aufmachen und euch fragen, was ihr prinzipiell von der Technik haltet (also ich finde sie natürlich super
)
Also erst einmal der Basiscode:
und hier noch die Element.prototype.php:
Kommentare und Fragen erwünscht.
EDIT: Hab' gerade noch einen Fehler entdeckt - werd' ich gleich ausbessern! EDIT2: behoben.
Da ich meine Testseite für das Problem des fehlenden window.Element in IE<8 schon in einem anderen Thread (http://forum.jswelt.de/javascript/50261-js-dateien-laden-index-html-scr-variable-4.html#post315904 - Testseite: http://kkjs.kkapsner.de/tests/Element.prototype.html) gepostet habe wollte ich jetzt doch mal einen extra Thread dazu aufmachen und euch fragen, was ihr prinzipiell von der Technik haltet (also ich finde sie natürlich super
Also erst einmal der Basiscode:
Code:
var load_url = "/"; //the url to the directory where the PHP-file lies
function createNodePrototype(name, selector){
if (!name){
name = "Element";
selector = "html, body, body *, head, head title, head base, head isindex, head link, head meta, head object, head object *, head style, head script";
}
if (!selector) selector = name.toLowerCase();
// check if it exists already
if (window[name]) return window[name];
var wrapper, style = document.createStyleSheet(),
rule = [];
if (document.createComment){
wrapper = document.createComment("wrapper for " + name + ".prototype");
}
else {
// I do NOT support IE5.5
return false;
}
selector = selector.split(/\s*,\s*/);
for (var i = 0; i < selector.length; i++){
style.addRule(selector[i], "behavior: url(" + kkjs.url.load + "init.htc);");
rule.push(style.rules[style.rules.length - 1]);
}
wrapper.onpropertychange = function(){
var url = load_url + "Element.prototype.php?nodeName=" + name + "&func=" + window.event.propertyName + "&rand=" + (new Date().getTime());
for (var i = 0; i < rule.length; i++){
rule[i].style.behavior += " url(" + url + ")";
}
};
document.getElementsByTagName("head")[0].appendChild(wrapper);
window[name] = function(){};
window[name].prototype = wrapper;
return window[name];
};
createNodePrototype();
und hier noch die Element.prototype.php:
PHP:
<?php header("Content-type: text/x-component");?><PUBLIC:COMPONENT>
<PUBLIC:METHOD NAME="<?php echo $_GET['func'];?>" INTERNALNAME="_<?php echo $_GET['func'];?>"/>
<SCRIPT LANGUAGE="JScript" type="text/javascript">
if (element != window.<?php echo $_GET['nodeName'];?>.prototype){
_<?php echo $_GET['func'];?> = function(){ return window.<?php echo $_GET['nodeName'];?>.prototype.<?php echo $_GET['func'];?>.apply(this, arguments);};
}
</SCRIPT>
</PUBLIC:COMPONENT>
Kommentare und Fragen erwünscht.
EDIT: Hab' gerade noch einen Fehler entdeckt - werd' ich gleich ausbessern! EDIT2: behoben.
Zuletzt bearbeitet: