有没有办法从字符串加载CSS和JavaScript?

时间:2012-05-05 00:51:16

标签: javascript html css web

我见过很多从文件中动态加载CSS和javascript的例子。 Here's a good example。但有没有办法加载CSS或javascript作为字符串?例如,像:

var style = ".class { width:100% }"
document.loadStyle(style);

或者那种性质。

3 个答案:

答案 0 :(得分:11)

var javascript = "alert('hello');";
eval(javascript);

这将从字符串加载JavaScript,但要注意这是非常不安全的,不建议使用。如果恶意进程干扰了您的JavaScript字符串,则可能会导致安全问题。

就CSS而言,您可以使用jQuery将样式标记附加到页面,如下所示:

$('head').append("<style>body { background-color: grey; }</style>");

或者,对于JavaScript纯粹主义者:

var s = document.createElement("style");
s.innerHTML = "body { background-color:white !important; }";
document.getElementsByTagName("head")[0].appendChild(s);

答案 1 :(得分:0)

不使用潜在危险的evalinnerHTML的另一种方法是使用base64编码的URL创建一个link元素:

function loadCSS(cssStyles) {
  const link = document.createElement('link');
  link.href = `data:text/css;base64,${btoa(cssStyles)}`;
  link.type = 'text/css';
  link.rel = 'stylesheet';
  document.getElementsByTagName('head')[0].appendChild(link);
}

答案 2 :(得分:0)

但是,此代码仅适用于包含样式标记的单个 HTML 文件

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style></style>
</head>
<body>
    <div class="foo"></div>
    <div class="bar"></div>
</body>
<script>
    const cssText = `.foo{
            background-color: black;
            width: 100px;
            height: 100px;
        }
        .bar{
            background-color: gray;
            width: 100px;
            height: 100px;
        }`
    document.querySelector("style").innerText = cssText;
</script>
</html>```