【问题标题】:The best way of loading and parsing css stylesheet in flash as3在 flash as3 中加载和解析 css 样式表的最佳方式
【发布时间】:2025-12-14 03:35:01
【问题描述】:

我不是第一次遇到这个“问题”。其他时候,我确实避免了这个问题,但现在我想面对它。

这个想法是用这样一个简单的css代码加载一些文件“myBeautifulStyles.css”:

@charset "UTF-8";
/* CSS Document */

h1, h2, h3, p, a {
    font-family:Arial, Helvetica, sans-serif;
}

h1 {
    font-size:16px;
    font-weight:bold;
}

h2 {
    font-size:14px;
    font-weight:bold;
}

h3 {
    font-size:12px;
    font-weight:bold;
}


p {
    font-size:12px;
    font-weight:normal;
}

如果我只是将它作为文本加载并尝试 StyleSheet.parseCSS() 结果为 null,则 .styleNames 返回一个空数组。我想知道是关于文本(断行标记、初始代码......)还是缺少其他东西。网络上的示例总是单行代码。清理此文本并将其放在一行中很容易,但可以吗?

最重要的是,这项任务的最佳方法是什么?

编辑:根据需要,此代码通过 php 加载 de css 文件(用于避免缓存):

var ur:URLRequest = new URLRequest(httpBase+"admin_arqs.php");
ur.method = URLRequestMethod.POST;
var Vars:URLVariables = new URLVariables();
Vars.op = "ler";
Vars.url = httpBase+"conteudos_estilos.css";
ur.data = Vars;
var ul:URLLoader = new URLLoader();
ul.dataFormat = URLLoaderDataFormat.TEXT;
ul.addEventListener(Event.COMPLETE, estilos);
ul.addEventListener(IOErrorEvent.IO_ERROR, ioerror);
ul.load(ur);

function estilos(e){
    e.currentTarget.removeEventListener(e.type, arguments.callee);
    e.target.removeEventListener(IOErrorEvent.IO_ERROR, ioerror);
    var Res = JSON.decode(clearRes(String(e.target.data)));
    if(Res.erro!="OK"){
        msg("Erro: "+Res.msg);
    } else {
        ini_edit(Res.dados);
    }
}

function ioerror(e){
    e.currentTarget.removeEventListener(e.type, arguments.callee);
    e.target.removeEventListener(Event.COMPLETE, estilos);
    msg("Erro de IO!");
}

这部分设置样式表:

trace("Estilos em string: "+css);
var estilos:StyleSheet = new StyleSheet();
estilos.parseCSS(css);
texto.styleSheet = estilos;
trace("Estilos definidos: "+estilos.styleNames);

上面显示了生成css文本的第一个跟踪。第二个应该显示一个带有名称的数组。我也尝试跟踪 estilos.styleName.length 并且为零。

texto 是 TextField,css 来自 Res.dados。

【问题讨论】:

  • 请向我们展示您的代码,尤其是加载部分
  • 我会把代码放在上面。我做了测试:在一行中处理所有的css并删除其他元素(包括cmets),它工作!到目前为止是我的解决方案,如果没有更好的存在的话。但是,html 渲染与浏览器不同:p 标签之间没有间距,并且可以接受换行符。更多处理,或者我在 TextField 中缺少一些调整?
  • 我试过了,看我的回答

标签: css actionscript-3 stylesheet textfield


【解决方案1】:

似乎css文件头部的这一行@charset "UTF-8";会导致问题。尝试删除它,看看它是否解决了问题。

【讨论】:

  • 只有去掉这一行才能解决问题,还是需要全部放在一行中?
  • @GustavoPinent 只需删除此行。我们希望保持我们的css 自然!它们本质上不是单线的,对吗? ;)
  • @GustavoPinent 很高兴它有效!我必须说这是一个有趣的问题