繁体   English   中英

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

[英]Is it possible for someone to run JavaScript by typing it in an input box?

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

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

<!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>

如果我在输入框中键入以下内容并按Enter键,则不会发生任何事情。 这是为什么?

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

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

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

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

可以使用eval()从输入框运行脚本。 你这样做的方式是行不通的,因为规范声明不应该执行通过.innerHTML插入的脚本(这是本节末尾的一个大绿色注释)。

w3c规范 ......

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

而只是使用eval

你不需要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>

这里的工作示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM