用里面的脚本设置innerHTML [重复]

Posted

技术标签:

【中文标题】用里面的脚本设置innerHTML [重复]【英文标题】:setting innerHTML with a script inside [duplicate] 【发布时间】:2012-07-26 13:19:51 【问题描述】:

如果我在任何页面上的 Firebug 中运行以下行:

document.documentElement.innerhtml="<script>alert(1)</script>";

为什么不执行alert 命令?

【问题讨论】:

@11684:HTML5 不需要。 @Rocket 你不知道他用的是哪个浏览器! 哦,等等。 Firebug...这意味着 Mozilla... 这个链接有帮助吗? ***.com/questions/1197575/… 我认为这是为了赢得“你可以在一行代码中容纳多少有问题的 javascript 实践”竞赛。 【参考方案1】:

看起来您的&lt;script&gt; 标签正在按您的预期添加,但其中的代码没有被执行。如果您尝试使用 document.head(或 any 其他 DOM 元素,似乎)也会发生同样的失败。无论出于何种原因(可能符合标准,可能的安全性),通过.innerHTML 添加的&lt;script&gt; 块内的内联代码根本无法运行。

但是,我确实有可以产生类似功能的工作代码:

var script = document.createElement('script');
script[(script.innerText===undefined?"textContent":"innerText")] = 'alert(1);';
document.documentElement.appendChild(script);

在这里,您将&lt;script&gt; 块与documentElement.appendChild 添加并使用textContentinnerText 设置&lt;script&gt; 的内容。

【讨论】:

eval() 的不错替代品。【参考方案2】:

实际上您可以使用eval,但这不是解决安全问题的好习惯。你可以这样做:

var scr = document.createElement('script');
scr.src = 'yourscriptsource';
document.body.appendChild(scr);

希望对你有帮助!

【讨论】:

【参考方案3】:

最好使用创建元素并附加它们,而不是使用 innerhtml 直接插入任何 html。

您可以在此处阅读更多信息:https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

此片段有效:

var newScript = document.createElement( "script" );
newScript.type = 'text/javascript';
var scriptContent = document.createTextNode( "googletag.cmd.push( function()  googletag.display( '" + encodeURIComponent( divID ) + "' );  );" ); 
newScript.appendChild( scriptContent ); 

以下是实际示例: https://jsfiddle.net/BrianLayman/4nu667c9/

【讨论】:

【参考方案4】:

你不要那样做。在 Firebug 中,转到“控制台”选项卡。您可以直接在此处输入代码。在控制台底部的三个蓝色尖括号旁边键入此内容,然后按 Enter 键:alert("asdf");

【讨论】:

OP 正在尝试诊断为什么这行代码不能按预期工作。几乎可以肯定,OP已经在使用 Firebug 控制台(除了控制台之外,run the following line in Firebug 还能在哪里使用?)。

以上是关于用里面的脚本设置innerHTML [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不删除之前的 innerHTML 的情况下使用 innerHTML? [复制]

在 innerHTML 中加载脚本 [重复]

使用innerhtml将脚本标签插入到html元素中[重复]

语法中的 innerHTML 错误不起作用;未捕获的 TypeError:无法设置 null 的属性(设置“innerHTML”)[重复]

js_更新DOM

可以用 innerHTML 插入脚本吗?