【问题标题】:Parse HTML string containing script tag and document.write解析包含脚本标签和 document.write 的 HTML 字符串
【发布时间】:2015-01-26 02:25:19
【问题描述】:

我有以下字符串。它有嵌套的 document.write 字符串语句。我想将最内层脚本的文本内容添加到文档中。

"document.write('<script>document.write(\"<script>document.write(\"Hello World\");<\/script>\");<\/script>')"

如何解析这个字符串,以便将 Hello World 添加到文档中。例如html输出可以如下。(可以是body或div,什么都可以。)

<body>Hello World</body>

附:可以有任意数量的嵌套 document.write 语句。需要解析这个可以处理n级嵌套的字符串。

【问题讨论】:

  • 问题是?
  • 您能否举一个您要添加的示例。如果您创建示例,它将很容易理解取两个字符串,其中显示实际字符串,在其他字符串中显示您要插入的位置

标签: javascript


【解决方案1】:

好吧,我现在想通了。

    var str = "document.write('<script>document.write(\"<script>document.write(\"Hello World\");<\/script>\");<\/script>')";
    var aStr, scriptEle = document.createElement('script');
    aStr = str.replace(/["']/g, '"');
    aStr = aStr.replace(/"<script>document.write/g, "");
    aStr = aStr.replace(/;<\/script\>"/g, "");
    scriptEle.innerHTML = aStr;
    // console.log(aStr);
    document.body.appendChild(scriptEle);

这也处理 n 级嵌套。

【讨论】:

    【解决方案2】:

    您基本上必须告诉脚本在&lt;script&gt; 标签内执行脚本。 你可以通过这样做来实现这一点

    var code = "<script>document.write(\"Hello World\");</scr"+"ipt>";
    $('body').append($(code)[0]);
    

    它会在 body 标签中愉快地显示 hello world。您可以使用这种方法通过将脚本附加到任何标签上来执行脚本。这是jsfiddleSO answer,可以让您了解如何执行动态附加的js

    希望对你有帮助:)

    【讨论】:

    • 感谢您的帮助。但是我不能拆分字符串,因为这个字符串来自服务器,它可以有多个 &lt;/script&gt; 标签。也可以有任意数量的document.write 语句。我用纯js想出了答案。
    • 一些像 Babel 这样的编译器很聪明,然后将字符串连接成一个字符串。在运行时它会中断 JS 执行
    猜你喜欢
    • 2016-05-06
    • 2015-07-14
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多