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: 8 let
|
0