怎么快速定位是哪行js阻止我提交表单,表单有十几个输入框,有一个格式写错了,但是所有都是红框,代码不是我写的,我想在浏览器里debug一下js,看看是哪一行阻止了我
全部打上断点然后挨个debug就行
以下内容引用自GPT,有用望采纳:
要快速定位阻止表单提交的代码行,您可以使用浏览器的开发者工具来调试JavaScript代码。以下是在大多数现代浏览器上使用常见的调试方法:
打开您要调试的网页,并确保表单已经加载。
按下键盘上的 F12 键或右键点击页面上的任意位置,然后选择“检查”或“检查元素”选项。
在开发者工具中,找到并选择“控制台”选项卡。这是显示JavaScript错误和日志消息的地方。
在您提交表单后,观察控制台中的错误消息和警告。如果有JavaScript错误,它们将显示在这里。点击错误消息可跳转到对应的代码行。
如果没有明显的错误消息,您可以使用“断点”来暂停代码执行并逐行调试。在“调试”选项卡中,在代码左侧选择要设置断点的行,通常在靠近表单提交相关的代码位置。
刷新页面并提交表单。代码执行将暂停在设置的断点处。您可以使用调试工具栏上的“继续”按钮逐行执行代码。
当代码执行到阻止表单提交的行时,您可以观察在表单输入框上发生的变化。可能会有某些条件或验证函数返回false或阻止了提交。
通过调试工具,您可以定位到具体的代码行,并观察变量的值、条件的结果等信息,从而找出导致表单提交被阻止的问题所在。请注意,具体操作步骤可能因浏览器和开发者工具版本而有所不同,但大部分现代浏览器都提供类似的调试工具和功能。
不知道你这个问题是否已经解决, 如果还没有解决的话:在12896行打一个断点, 我们查看一下四个参数究竟是什么东东
参数d:
{“rid”:“R_SO_4_1379057027”,“offset”:“100”,“total”:“false”,“limit”:“20”,“csrf_token”:""}
参数e:
010001
参数f:
00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7
参数g:
0CoJUm6Qyw8W8jud
关键的源码
function a(a) {
var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
for (d = 0; a > d; d += 1)
e = Math.random() * b.length,
e = Math.floor(e),
c += b.charAt(e);
return c
}
function b(a, b) {
var c = CryptoJS.enc.Utf8.parse(b)
, d = CryptoJS.enc.Utf8.parse("0102030405060708")
, e = CryptoJS.enc.Utf8.parse(a)
, f = CryptoJS.AES.encrypt(e, c, {
iv: d,
mode: CryptoJS.mode.CBC
});
return f.toString()
}
function c(a, b, c) {
var d, e;
return setMaxDigits(131),
d = new RSAKeyPair(b,"",c),
e = encryptedString(d, a)
}
function d(d, e, f, g) {
var h = {}
, i = a(16);
return h.encText = b(d, g),
h.encText = b(h.encText, i),
h.encSecKey = c(i, e, f),
h
}
function e(a, b, d, e) {
var f = {};
return f.encText = c(a + e, b, d),
f
}
window.asrsea = d,
window.ecnonasr = e
结合步骤05的图解, 可以知道方法b是一个加密方法,方法d是一个参数组装方法,
细看方法d, 会发现调用了两次方法b, 也就是加密两次了, 第一次是对参数d, g加密, g是一个常量, 上面以及解析了, 第二次是对第一次机密的结果再次进行加密, 参数i是一个调用了a方法的16为随机数, 因此i也是可以理解为一个常量值, 通过debug, 就可以查到这个常量是什么了
接着再看 h.encSecKey = c(i, e, f),这行代码
由于 i 可以理解为常量, e 传入d方法的时候也是常量, f 传入d方法的时候也是常量,
因此可以理解为h.encSecKey也是一个常量, 我们只需要debug, 获取到一个h.encSecKey即可( 但是这个encSecKey和参数 i 需要 同一次debug出来的才可以, 否则有问题的…)