有人可以通过在输入框中键入来运行JavaScript吗?

时间:2014-04-24 14:42:42

标签: javascript jquery security

这不是我真正想做的事情,只是想知道它是否可能。

假设我有一个这样的页面,它只是一个标题和一个输入框。

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>2014-4-24-01</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
function jQuerySetup() {
    if($) {

        $(document).ready( function () {

            $("body").on("keypress", "input", function ( event ){

                if(event.keyCode == 13){

                    $("body").get(0).innerHTML = this.value;

                }

            });

        });

    } else {

        window.setTimeout(jQuerySetup, 250);

    }

}

jQuerySetup();                  
</script>
</head>
<body>
<h3>Test</h3>
<input type="text" width="20">
<div id="testDiv"></div>
</body>
</html>

如果我在输入框中输入以下内容并点击回车,则没有任何反应。那是为什么?

<script>window.setTimeout(function () { alert("Uh oh"); }, 1000);</script>

编辑:我知道有人通过控制台窗口运行JavaScript并获得类似的效果非常容易。但我的问题更多的是理解为什么以上是不可能的(或者为什么我没有把它弄好)。

4 个答案:

答案 0 :(得分:2)

innerHTML不会执行脚本,而是使用jQuery html

$("body").html(this.value);

答案 1 :(得分:1)

可以使用eval()从输入框运行脚本。由于specification states通过.innerHTML插入的脚本不应被执行(它在该部分的末尾是一个大的绿色注释),因此您的工作方式无法工作。< / p>

答案 2 :(得分:0)

来自w3c spec ...

  

注意:使用innerHTML插入的脚本元素在插入时不会执行。

而只是使用eval

答案 3 :(得分:0)

您不需要if($) {setTimeout,因为它由$(document).ready处理。

您可以尝试:

<script>
$(document).ready( function () {
    $("body").on("keypress", "input", function ( event ){
        if(event.keyCode == 13){
            $("body").get(0).innerHTML = this.value;   
        } 
    });    
});
</script>

工作示例here