2012-06-06 38 views
0

在Chrome插件,通过后台脚本,我注入一种风格是这样的:的Javascript:如何检查样式是否已注入

if(!styleLeft){ 
    var styleLeft = document.createElement("style"); 
    document.head.appendChild(styleLeft); 
    styleLeft.innerHTML = "a, .left-hand { cursor: wait; }"; 
} 

但是当样式标签,如果不工作已经在页面中。我怎样才能找到我的特定风格?

谢谢。

+0

哪一个是“你的具体风格”? – Bergi

+0

为什么你在if条件中使用'styleLeft',你事后分配给它?请向我们展示完整的代码。 – Bergi

+0

因为是一个铬插件 – lorussian

回答

1

检查ID。例如:

if (!!document.getElementById('a-long-id-that-will-never-collide')) { 
    var styleLeft = document.createElement("style"); 

    // Set the ID so that you can check for it later 
    styleLeft.id = 'a-long-id-that-will-never-collide'; 

    document.head.appendChild(styleLeft); 
    styleLeft.innerHTML = "a, .left-hand { cursor: wait; }"; 
} 
+0

为什么所有这些不必要的工作?通过ID每次额外查找,设置ID比CAN碰撞?从问题本身解决单个JS方面的变量几乎是完美的,除了不正确的范围。 –

+0

因为它很简单,而且不会污染全球范围。介绍范围问题只会让它变得更加复杂,所以我选择这样回答。如果你想展示如何使用闭包,请在你的答案中显示代码,我会很高兴得到它的赞扬。 –

+0

它改变了DOM,反对很好的做法来分离数据和表示层。 –

2

请确保您声明styleLeft在全局范围内或在此检查的任何外部范围内。否则,您只需将其放在范围末尾,并在每次迭代中创建一个新的空变量。

0

您可以解析document.styleSheets(他们应该是在Chrome插件访问,但我不是100%确定)。如果你给你每次注入一个独特的标题样式,你将有一个更简单的方法找到您已经注入的风格:

var styleLeft = document.createElement("style"); 
styleLeft.setAttribute("title", "<a unique id>"); 
document.head.appendChild(styleLeft); 
styleLeft.innerHTML = "a, .left-hand { cursor: wait; }"; 
document.head.appendChild(styleLeft); 

现在的document.styleSheets最后一个项目有一个.title伪属性。您可以使用它来查看它是否属于您的。