JavaScript中的prompt()是否可以通过脚本来回答?

9
基本上,我需要进行一次检查。
假设有这段代码: prompt("是或否?") 用户必须在此处点击答案。在JavaScript中没有一种方法可以“回答”用户的问题...正确吗?我知道的一切都表明这是不可能的...但是想要先在这里三重检查一下。

2
如果问题可以通过代码回答,为什么要使用prompt() - Alex Wayne
2
@Alex:我认为OP想要验证程序上无法通过编程方式篡改“prompt”。 - Felix Kling
2
一个新的验证码方法? - j08691
虽然在打开提示符时似乎可以执行控制台中的代码,但没有函数返回对提示符的引用,这将允许任何人与其交互。 - Felix Kling
没错,我只是想确认一下是否有JavaScript的某种方法可以回答提示。长话短说...这是为了进行合成监控测试。我只是想确保当我告诉我的客户“我们不能因为您的网站使用提示对话框”时,我没有漏掉什么:D - Charlie74
有人尝试过异步JavaScript线程吗?我的意思是,当出现提示/警报时,Service Worker和Web Workers也会暂停吗? - iiic
4个回答

8

不行。

prompt() 立即弹出一个模态对话框,并阻止所有后续脚本执行,直到输入值。没有机会在任何时候拦截或处理它,因为在它弹出的时候不允许运行任何代码。

也许你想要一种不那么侵入式的方式来弹出对话框,比如 jQuery UI 对话框


等等,所以你似乎更关心它可能被篡改,你不希望它被篡改?

如果是这样,我的答案仍然正确,但有其他方法可以解决它。例如,在运行之前覆盖 prompt() 函数以执行您想要的操作。此代码片段将防止出现任何提示并硬编码特定的返回值。

window.prompt = function() { return 'spoofed' };
var name = prompt("What's your name?"); // no prompt appears
console.log(name); //=> 'spoofed'

如果不知道你想要实现什么,很难建议如何进行操作。但是,如果你想要一个能够回答“你是人类吗?”这个问题的提示,那么它并不可靠,因为它很容易被绕过。


我完全同意alert()和prompt()对话框的侵入性。我从来不是它们的粉丝。这恰好是我正在为客户创建合成监控测试的网站...当然,他们使用这些类型的对话框。正如上面提到的,我只是想确保当我说“我们无法针对这些脚本”时,我的假设是正确的 :) - Charlie74
@Charlie74,请看我的更新。你可以通过防止警告/提示框的出现轻松地进行黑客攻击。 - Alex Wayne
有趣的...我得把它作为一种可能性来看看。感谢这个技巧...也许是我可以用来绕过客户使用对话框的东西。 - Charlie74

2
您说得对,整个程序都会等待用户响应,因此可以编程“回答”提示的代码也无法运行。 点击这里 了解更多关于 Window.prompt 的信息。

2

不可以在JS代码中回答prompt()。


1
一般情况下(仅限未修改的桌面浏览器),我认为不行(请参见其他回答)。但是,如果您正在查看JavaScript alerts的其他应用程序,则可能是可行的。例如,使用Android SDK,您可以使用WebChromeClientonJsAlert方法:
public boolean onJsAlert(WebView view, String url, String message,
    final android.webkit.JsResult result) {
        builder.setTitle(ActivityTitle)
            .setMessage(message)
            .setPositiveButton("OK",
                new AlertDialog.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                        int which) {
                        result.confirm();
                    }
                }).setCancelable(false).create().show();
    return true;
}

检查源代码可能是值得的,以了解如何完成此操作。这可能与浏览器有关联,但如果您真的想深入了解,这可能很有趣。
或者
如果您需要能够使用JavaScript控制的一种类似警报框的东西,则应符合ARIA规范,如MDN on the alert role中所述。这样做将允许类似的功能,允许对警报进行样式设置,并且也可供辅助设备使用的人使用。
我能看到使用它的一个缺点是它不会像上面讨论的那样连接到某些内容。如果Android开发人员选择覆盖警报,则我认为它不会按预期工作。

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