【问题标题】:Insert JavaScript code from JavaScript从 JavaScript 插入 JavaScript 代码
【发布时间】:2012-04-28 02:45:15
【问题描述】:

我需要通过类似 jsonp 的方法获取 html 代码,并将其显示在 div 元素上。这适用于简单的 html,如图像、文本等。但是现在代码可以包含 JavaScript 标记,并且需要将其插入到 div 中,但是 javascript 不能运行,我用一个例子来恢复它:

var div = document.getElementById('mydiv');

div.innerHTML = '<scipt type="text/javascript"> console.log('I run!'); </script>';

这也行不通,我也试探一下:

var otherdiv = document.createElement('div');

otherdiv.innerHTML = '<scipt type="text/javascript"> console.log('I run!'); </script>';

div.appendChild(otherdiv);

但也不行。

如何在 JavaScript 运行时插入代码?

【问题讨论】:

  • 它应该是 &lt;script&gt;,而不是 &lt;scipt&gt;(缺少一个 R),并且它必须被插入到 live dom 中,而不仅仅是在无处晃荡。
  • 在你的第二次 sn-p 中,让“我跑!” “我跑!”它会起作用的。
  • 您拼错了“脚本”,并且您的 console.log 中的引号将字符串分解。
  • 好吧好吧对不起,我做一个简单的例子,真正的代码更复杂。

标签: javascript dom


【解决方案1】:

最直接的方法是提取所有JavaScript和eval它。

您可以使用以下正则表达式提取 JavaScript:

var match = html.match(new RegExp("<script[^>]*>(.+)</script>"));
console.log(match);

这是一种远非最佳的 JavaScript 执行方式,非常容易出错并且可能不安全。我强烈建议不要这样做。

【讨论】:

  • 如果是唯一的方法 :-(,如果脚本有 document.write,这是一个问题...我正在应用代码,但它是 dinamyc,我不知道代码在插入之前。唯一的方法是将 /document.write[\s\t\n\r]*((.*))/ 模式替换为 theParent.innerHTML(\1);
  • document.write 太可怕了。
  • 是的,但我不决定插入
【解决方案2】:

您应该使用像 LAB、yep/nope 或 Frame.js 这样的脚本加载器。浏览器有内置限制,脚本加载是在页面上包含脚本的最佳实践。

您还必须转义单引号。

console.log(\'I run!\');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多