HTML:在引号内使用引号和嵌套引号

21

我遇到了这个问题:

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

问题是我无法在引号内部再次使用引号,请问有什么想法吗?


2
字符串中简单转义不起作用吗? - Keshi
1
@Keshi - 请定义“简单转义”。 - Quentin
你打算通过这样做解决什么问题? - Pointy
1
即使您解决了引用问题,该代码也不会执行任何操作。当您设置“innerHTML”时,浏览器不会评估脚本内容。 - Pointy
4个回答

33

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;)的是在警报框中放置"'


2

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

代码:

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

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>

1
这并没有解决“在引号内嵌套引号”的问题。 - InsOp
@InsOp - 有时候问题标题只能捕捉到问题的一部分或者从一个角度看待问题。原始问题中提供的代码不仅仅是“在引号内使用引号”的问题……OP试图实现特定的功能,而多层引号导致他在处理中遇到了问题。解决他的问题的几种方法之一是删除导致所有这些引号层级需要的逻辑(我记录的方法)。它可能没有回答标题中的问题,但它确实解决了他的问题。 - talemyn
1
可以清楚地看到,这是一个简化的例子,以便我们能够准确地解决“在引号内使用引号”的问题。 - InsOp
@InsOp - 只是按照网站指南建议做: “仔细阅读问题。具体而言,问题在问什么?确保您的答案提供了这一点-或者提供了一个可行的替代方案。答案可以是“不要那样做”,但也应包括“尝试这个替代方案”。任何能让提问者朝着正确方向前进的答案都是有帮助的,但请尽量提及您的答案中的任何限制、假设或简化。简洁明了是可以接受的,但更充分的解释更好。”其他人试图帮助OP正确使用引号,我则试图帮助他根本不必使用它们。 - talemyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接