19

我被这个问题困住了:

<body onload="document.body.innerHTML="<script>alert('hi')</script>"">

问题是我不能在引号内的引号内使用引号。有任何想法吗?

4

4 回答 4

31

要表示由字符"分隔的 HTML 属性中的"字符,请使用实体&quot;

我建议使用 JavaScript 附加事件侦听器,而不是使用内部事件属性。它大大简化了事情。

但是请注意,浏览器不会执行添加到文档中的 JavaScriptinnerHTML。如果您想以编程方式添加脚本,请使用createElement/ appendChildet al.

于 2013-11-07T19:45:55.633 回答
10
<body onload='document.body.innerHTML="<script>alert(\"hi\")</script>"'>

或者

<body onload="document.body.innerHTML='<script>alert(\'hi\')</script>'">

它确实有效,但脚本没有被执行,因为它是在浏览器解析您的代码后添加的。

请注意,如果您想要引号内的引号内的引号内的引号,您会这样做:<body onload="document.body.innerHTML='<script>alert(\'\\\'hi\\\'\')</script>'" >

没有真正不可能的(我认为)&quot;是把"'放在警报中。

于 2013-11-07T19:45:12.717 回答
1

您可以使用反引号 (`)、单引号和双引号的组合。

代码:

<body onload="document.body.innerHTML=`<script>alert('hi')</script>`">
于 2020-12-29T18:32:36.230 回答
0

呸!首先,不要那样做。:D

就像是:

<body></body>

<script>
    window.onload = function () {
        document.body.innerHTML = "<script>alert('hi')</script>";
    }
</script>

. . . 会更好。也考虑一些 JQuery 解决方案。

即使是那种特定的方法,我也不推荐,但我怀疑您只是在测试如何在页面加载后向 HTML 正文添加内容,而不是真正想要使用alert(). ;) 如果是这种情况,请尝试以下操作:

<body></body>

<script>
    window.onload = function () {
        document.body.innerHTML = "some text";
        alert('hi'); // if you really want to test that the JS is working after load.
    }
</script>
于 2013-11-07T19:54:12.333 回答