相关疑难解决方法(0)

安全错误操作在firefox document.stylesheets中是不安全的

以下代码在带有continue的行的Firefox控制台中引发错误.

SecurityError: The operation is insecure.
if( !sheet.cssRules ) { continue; }
Run Code Online (Sandbox Code Playgroud)

但是在Chrome和IE 11中没有...有人可以解释一下这个吗?(以及如何重新安排使其安全.)我认为这是一个跨域问题,但我仍然坚持如何正确地重新编写代码.

var bgColor = getStyleRuleValue('background-color', 'bg_selector');

function getStyleRuleValue(style, selector, sheet) {
  var sheets = typeof sheet !== 'undefined' ? [sheet] : document.styleSheets;
  for (var i = 0, l = sheets.length; i < l; i++) {
    var sheet = sheets[i];
    if( !sheet.cssRules ) { continue; }
    for (var j = 0, k = sheet.cssRules.length; j < k; j++) {
      var rule = sheet.cssRules[j];
      if (rule.selectorText && rule.selectorText.split(',').indexOf(selector) !== …
Run Code Online (Sandbox Code Playgroud)

javascript security error-handling stylesheet

15
推荐指数
1
解决办法
3万
查看次数

在主样式表中设置时,myDiv.style.display返回空白

短版: 是不是标准的行为myDiv.style.display时,我已经设置(JavaScript)的返回空白div,以display:none在主样式表,但返回"无"时,它是通过一个内嵌样式设置?

长版:

我有一些div我隐藏和取消隐藏他们的display风格,用block和之间的Javascript切换它none.他们总是从hidden(display:none)开始,我一直用内联样式设置:

<div id="anID" class="aClass" style="display:none">
   stuff
</div>
Run Code Online (Sandbox Code Playgroud)

这是在none和之间切换的Javascript block.两个chOpsXXX()函数只设置divSection.style.display相反的值(以及其他内务处理):

var divSection = document.getElementById("chOpsSection" + strSectionID);
var strDisplay = divSection.style.display;
if (strDisplay == "none") {
    chOpsDisplaySection(strSectionID);
} else {
    chOpsHideSection(strSectionID);
}
Run Code Online (Sandbox Code Playgroud)

当我使用内联样式属性来设置初始display:none样式时,这一切都正常.

我还在主样式表中为这些div设置其他样式.所以我认为将初始状态移动display:none到所述样式表可能是有意义的.我这样做了.我不会发布它,我想你可以想象它.

但是当我这样做时,div最初是hidden(display:none),但第一次调用divSection.style.display返回一个空字符串(alert(strDisplay);返回一个空字符串,而不是null).

我上面显示的Javascript然后隐藏它(因为它不等于"none")然后下一次调用divSection.style.display返回"none"并且一切正常.(如果我inline在主样式表中将其设置为相同的行为:div初始可见,并且第一次调用divSection.style.display返回空字符串). …

javascript css

14
推荐指数
1
解决办法
4045
查看次数

检查外部样式表是否已加载后备

已经类似的帖子,但我觉得它不能很好地回答我的特定问题.

我想检查外部样式表是否已加载.例如,如果它已被网络问题阻碍,那么我想知道并加载回退.这是对于jQuery的主题CSS的CDN的后备,但我更喜欢这不是特别关于那个,因为我使用的其他外部CSS我也想应用它.

  • 参考link元素将在页面上,因此不能接受头部中链接元素存在的模式匹配.
  • 我没有能力在样式表中更改CSS,因此添加虚拟CSS是不可接受的.
  • 由于我无法控制外部样式表中的CSS,因此依赖CSS中的现有类是脆弱的,所以我更喜欢有另一种解决方案.
  • 使用超时是唯一的方法吗?我应该为它设置多长时间?我应该选择什么样的事件来衡量时间?
  • 我更喜欢纯javascript,然后是jQuery,但是其他javascript框架的答案将被接受,因为它们无疑会对某人有所帮助.

编辑:一个新的想法.如果通过AJAX加载样式表并检查状态代码怎么样?这是一个可行的选择吗,有人知道吗?


这是我目前的脚本:

<script type="text/javascript">
  var cdn = 'http://code.jquery.com/ui/1.10.1/themes/black-tie/jquery-ui.min.css';
  var ss = document.styleSheets;
  for (var i = 0, max = ss.length; i < max; i++) {
    var sheet = ss[i];
    var rules = sheet.rules ? sheet.rules : sheet.cssRules;
    if (sheet.href == cdn) {
      if ( rules == null || rules.length == 0) {
        var link = document.createElement("link");
        link.rel = "stylesheet";      
        link.href = '/js/jquery-ui/1.10.1/themes/black-tie/jquery-ui.min.css';
        document.getElementsByTagName("head")[0].appendChild(link);  
      }
      break;
    } …
Run Code Online (Sandbox Code Playgroud)

javascript css jquery

6
推荐指数
1
解决办法
4114
查看次数

标签 统计

javascript ×3

css ×2

error-handling ×1

jquery ×1

security ×1

stylesheet ×1