| Autor | Zpráva | ||
|---|---|---|---|
| tester Profil * |
#1 · Zasláno: 30. 8. 2016, 11:56:19
Proč je vždy výsledek sheets[i].hasOwnProperty('cssRules') false?
Jak pomocí JS otestovat jestli cssRules existuje v objektu document.stylesheets[2]?
cssList = function(node) {
var sheets = document.styleSheets, o = {};
var sheet;
for (var i in sheets) {
if ( sheets[i].hasOwnProperty('cssRules') )
sheet = sheets[i].cssRules;
else
if ( sheets[i].hasOwnProperty('rules') )
sheet = sheets[i].rules;
else
continue;
var rules = sheets[i].rules || sheets[i].cssRules;
for (var r in rules) {
if (node.is(rules[r].selectorText))
{
o = $.extend(o, make_it_easy.easy.css2json(rules[r].style), css2json(node.attr('style')));
}
}
}
return o;
} |
||
| Chamurappi Profil |
#2 · Zasláno: 30. 8. 2016, 12:52:02
Reaguji na testera:
„Proč je vždy výsledek sheets[>i].hasOwnProperty('cssRules') false?“ Protože takovou vlastní vlastnost nemá. Má ji CSSStyleSheet.prototype, od kterého sheets[i] dědí.
„Jak pomocí JS otestovat jestli cssRules existuje v objektu document.stylesheets[2]?“ if(document.stylesheets[2].cssRules) … nevím, co v tom hledáš za vědu. Nebo jde použít operátor in, pokud bys potřeboval rozlišit existující vlastnost naplněnou nepravdivou hodnotou (což v tomto případě nepotřebuješ.
Jaký smysl u tebe vlastně mají řádky 5 až 11? Vždyť to máš vyřešené na řádku 13 – do rules přiřazuješ buď jedno, nebo druhé… a pokud ani jedno neexistuje, tak je tam undefined a stačí ti testovat if(rules).
Proč používáš cyklus for-in na pole/kolekci? Na to není stavěný (byť ti to většinou asi bude fungovat).
|
||
| tester Profil * |
To ale nefunguje. Firefox 48 mi v Debuggeru Toolboxu hlásí exception: security error.
Za řádek 13 se nedostanu kvůli security error |
||
| tester Profil * |
#4 · Zasláno: 1. 9. 2016, 07:52:15
Vyřešeno.
var sheets = document.styleSheets, o = {};
var rules;
for (var i in sheets) {
// Firefox - Security fix:
try { rules = sheets[i].cssRules; } catch(err) {}
if(rules)
... |
||
| Radek9 Profil |
#5 · Zasláno: 1. 9. 2016, 10:13:28
tester:
To bude zřejmě kvůli tomu, že jsou určité stylopisy z jiné domény. Podobně jako k oknům (framům) z jiných domén k nim nemáš přístup, proto ten error. |
||
| _es Profil |
#6 · Zasláno: 1. 9. 2016, 22:14:03
Radek9 [#5]:
Alebo bude problém v tom, že tester napriek radám stále tvrdohlavo používa cyklus for-in na kolekciu a je v tom cykle aj niečo iné než člen kolekcie.
|
||
| Radek9 Profil |
#7 · Zasláno: 1. 9. 2016, 23:30:40
_es:
Tím to nebude. Ten objekt navíc obsahuje jen length a item. Ale ani jedno z toho není null nebo undefined, takže to nezpůsobí chybu. Problém je opravdu v těch jiných doménách (bez cross-origin). To přesně vyvolá security error.
|
||
|
Časová prodleva: 9 let
|
|||
0
