【发布时间】:2014-12-26 21:08:18
【问题描述】:
我想要实现的是让用户定义要由我编写的 JavaScript 文件处理的特定样式表,这是我用来获取指定样式表的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="sheet-1.css">
<link rel="stylesheet" href="sheet-2.css">
<link rel="stylesheet" href="sheet-3.css">
<!-- other css files -->
<style>
/* inline styles */
</style>
</head>
<body>
<script src="jquery-2.1.1.min.js"></script>
<!-- some plugins -->
<script>
jQuery(document).ready(function($) {
// user specified stylesheets
var watchedStyleSheetsNames = [ 'sheet-1.css', 'sheet-2.css', 'sheet-3.css' ]
var allSheets = document.styleSheets,
targetSheets = [];
for ( var i = watchedStyleSheetsNames.length - 1; i >= 0; i--) {
Object.keys( allSheets ).forEach ( function (j) {
if( allSheets[j].href && allSheets[j].href.indexOf( watchedStyleSheetsNames[i] ) !== -1 ) {
targetSheets.push(allSheets[j]);
}
});
};
// result
console.log( 'Watched Stylesheets Array : ' + targetSheets );
});
</script>
</body>
</html>
问题是在第一次页面加载时一切正常,然后在 3 到 5 次刷新 targetSheets 数组后返回空值,这显然会破坏之后完成的所有操作,然后再刷新一次我得到期望值等等。我尝试了所有浏览器,清除了我的缓存,同样的事情一次又一次地发生。这是我在控制台中得到的图像:
https://www.dropbox.com/s/ipnc20hcdr3d6wl/01.png?dl=0
我在所有浏览器的最新版本中使用 wamp 服务器在线和本地测试了我的代码。那么是什么导致了这个问题,我该如何解决呢?
感谢您的宝贵时间。
编辑
我找到了答案,因为实现了无前缀插件,该插件删除了链接节点,然后将处理后的 css 重新插入到样式标签中。
【问题讨论】:
-
听起来像是一种竞争条件。要验证它的竞争条件,请将该函数置于 setTimeout 中 3 秒。看看是否能解决问题。从那里你可能需要研究某种类型的依赖管理,比如 require js。
标签: javascript jquery dom browser prefixfree