方法
代码非常庞大和复杂,但是使用浏览器内置的开发者工具,我们可以专注于点击提示按钮时发生的事情。
您可以在单击事件上放置一个断点,然后单击提示按钮并查看您在 JavaScript 中的最终位置。不过,在这种情况下,我查看了提示按钮的 id(它只是hint
),并且因为我们知道该站点正在使用 jQuery,所以搜索了$("#hint").click
or的出现$('#hint').click
。一共有三个,但我们想要的是这个:
... $("#hint").click(function() {
var a = z.shift();
if (a) {
$(X).trigger("hintUsed"), E += 1;
var c = z.length + " step" + (z.length === 1 ? "" : "s") + " left";
$(this).val($(this).data("buttonText") || "I'd like another hint (" + c + ")");
var d = $(a).parent();
$(a).appendTo("#hintsarea").runModules(d), X.scratchpad.resize(), z.length === 0 && ($(a).addClass("final_answer"), $(X).trigger("allHintsUsed"), $(this).attr("disabled", !0));
}
var g = !f && e.readOnly,
h = $("#next-question-button").is(":visible");
!g && !h && tb("problems/" + r + "/hint", b(!1, G, "hint", (new Date).getTime()), function() {}, function() {}, "attempt_hint_queue");
}), ...
然后我们可以检查这些变量的值,进入函数等。
结果
流程是这样的:
z
是一个提示数组,或者更确切地说是 div,其中包含对名为showHint()
. 数组中的项目数与剩余的提示数相同。
- 代码获取此数组中的第一个 div 并将其分配给 variable
a
。
- 计算已使用/剩余多少提示。
- div
a
附加到工作区中带有 id 的空 div hintsarea
。
- div 中的 JavaScript
a
被执行:showHint()
.
showHint()
执行构成提示的附加计算并为数字和符号添加颜色。
MathJax 用于这种格式。如果您使用开发人员工具检查 DOM,您会看到每个数字和符号都包含在几个动态创建的 span 中,以控制位置和样式。
关于拉斐尔,在这种情况下,它仅用于绘制总和中的水平线。不过,对于其他问题,我认为它用于绘制可以拖动的图像和对象。
顺便说一句,当单击提示按钮时,还会向服务器发送一个 XHR 请求,但这似乎不会影响用户的功能。它只是将统计数据发送回可汗学院,我假设他们将其用于监控和改进功能。