我如何断言页面的CSS已在Watin 2.1中成功加载并应用了其样式?
在进行了一些研究并写下我的答案之后,我偶然发现了该链接,该链接解释了您需要了解的有关CSS的所有信息,何时加载CSS以及如何检查CSS。
实际上,所提供的链接对它的解释很好,以至于我在其中添加了一些引用以供将来参考。 如果您好奇,我的答案将是#2和#4的变体。
…
顺便说一句,让我们看看这里有什么。
// my callback function // which relies on CSS being loaded function CSSDone() { alert('zOMG, CSS is done'); }; // load me some stylesheet var url = "http://tools.w3clubs.com/pagr/1.sleep-1.css", head = document.getElementsByTagName('head')[0], link = document.createElement('link'); link.type = "text/css"; link.rel = "stylesheet"; link.href = url; // MAGIC // call CSSDone() when CSS arrives head.appendChild(link);
魔术部分的选项,从容易到荒谬
第5个选项太疯狂了,它假定您可以控制CSS的内容,所以就算了。另外,它还会检查超时中的当前样式,这意味着它将刷新重排队列,并且可能会变慢。CSS到达的速度越慢,重排就越多。所以,真的,算了吧。
那么如何实施魔术呢?
// MAGIC // #1 link.onload = function () { CSSDone('onload listener'); }; // #2 if (link.addEventListener) { link.addEventListener('load', function() { CSSDone("DOM's load event"); }, false); }; // #3 link.onreadystatechange = function() { var state = link.readyState; if (state === 'loaded' || state === 'complete') { link.onreadystatechange = null; CSSDone("onreadystatechange"); } }; // #4 var cssnum = document.styleSheets.length; var ti = setInterval(function() { if (document.styleSheets.length > cssnum) { // needs more work when you load a bunch of CSS files quickly // e.g. loop from cssnum to the new length, looking // for the document.styleSheets[n].href === url // ... // FF changes the length prematurely :( CSSDone('listening to styleSheets.length change'); clearInterval(ti); } }, 10); // MAGIC ends