JavaScript Stylesheet script fehlerhaft in Opera

JBO_Zocker

Cadet 3rd Year
Registriert
März 2007
Beiträge
45
Hallo zusammen,

Ich habe mir hier ein JavaScript zusammengebaut, das externe stylesheets ausliest oder verändert:

Code:
function style(name, attribute, value){
    
    var stylesheet = document.styleSheets[0];
    
    var rules;
    if(typeof(stylesheet.cssRules) != "undefined" && stylesheet.cssRules !== null)
         rules = stylesheet.cssRules;
    else
         rules = stylesheet.rules;
    var ruleIndex;
    for(var i=0;i<rules.length;i++){
         if(rules[i].selectorText == name){
              ruleIndex = i;
         }
    }
    var order;
    var returnValue;
    if(!ruleIndex){
         if(value){
              var totalrules=stylesheet.cssRules? stylesheet.cssRules.length : stylesheet.rules.length;
               if(stylesheet.deleteRule){
                    order = 'stylesheet.insertRule("'+name+'{}", totalrules-1);';
               }
               else
                    order = 'stylesheet.addRule("'+name+'","");';
               eval(order);
               for(i=0;i<rules.length;i++){
                    if(rules[i].selectorText == name)
                         ruleIndex = i;
               }
         }
    }
        
    if(value){
         order ="rules["+ruleIndex+"].style."+attribute+"=\""+value+"\";";
         eval(order);
    }
    else{
         order = "returnValue = rules["+ruleIndex+"].style."+attribute;
         eval(order);
         return returnValue;
    }
    
    }

Ich hoffe, er erklärt sich von selbst.

Jetzt binde ich dieses Script zusammen mit dem Stylesheet ein. Wohlgemerkt erst das Stylesheet. Wenn ich aber die komplette Seite aufrufe, funktioniert im Opera Browser genau das javaScript nicht. Ich weiß nicht, ob das Stylesheet noch nicht geladen ist zu dem Zeitpunkt, oder woran es sonst liegen könnte. Ich kenne nur die Fehlermeldung, die die Fehlerkonsole mir ausspuckt:

Uncaught exception: ReferenceError: Security error: attempted to read protected variable
Error thrown at line 7, column 4 in style(name, attribute, value) in http://blablabla/blablabla/blablabla/js/help.js:
if(typeof(stylesheet.cssRules) != "undefined" && stylesheet.cssRules !== null)

Wenn ich jetzt auf der Seite nen Link aufrufe, funktioniert alles. Keine Fehlermeldungen. Und wenn ich danach aktualisiere auch. Nur beim ersten Start klappt das nicht. Und nur in Opera.

Zu erwähnen wäre vielleicht noch, dass die Homepage auf dem CMS Contenido läuft.

Kann mir vielleicht jemand bei diesem Problem behilflich sein? Übersehe ich irgendetwas?

Vielen Dank schon mal im vornherein.

JBO_Zocker
 
Auf den ersten Blick sieht das nach einem Lesefehler aus... keine Leserechte oder die variable ist oop mäßig weggekapselt (protected).

Einfachste Lösung wäre hier die Exception mit einem Try/catch block abzufangen. (Meldet ja auch: Uncaught exception -> unsauber)
 
Kommt eine der Dateien zufällig von einer Subdomain?

€dit: Mal kurz bei jsbin reingehauen, da geht es bei mir im Opera: http://jsbin.com/afebux/6/edit
 
Zuletzt bearbeitet:
nee nee, die dateien liegen alle in einem Verzeichnisbaum. Hab' jetzt die Exception ausprobiert, bringt aber logischerweise nichts, weil ich ja wie gesagt nur den Fehler abfange. Die Frage ist, ob ich noch mit ner anderen Methode an die CSS daten rankomme, wenn Opera diese nicht zugänglich macht. Lässt sich ja dann mit der Exception gut verbinden. mit JQuery hab' ich mich ehrlich gesagt noch nicht wirklich befasst.
 
Du könntest es mit JQuery so versuchen:
Code:
<script type="text/javascript">
$(document).ready(function () {
$('head').append('<link href="cssFolder/sheet2.css" rel="stylesheet" id="banSheet" />');
});
</script>
Ansonsten mal googlen finde da auf anhieb mehrere lösungen.

JQuery ist eine sehr mächtige JS-API die viel progammierarbeit abnimmt.
JQuery - write less, do more
 

Ähnliche Themen

Zurück
Oben