好吧,让我先说一下我的编程经验很少,所以如果我的解释掩盖了一些严重的无知,我会道歉。我一直想学习某些技巧,但我找不到任何教程。
这是交易:
有一个网站可以为您提供各种科学问题并对输入进行评分。对于每个问题,都有一个名为“练习其他版本”的按钮,它会生成一个弹出框,其中包含一个新的相似版本的问题。这个新版本还有一个名为“显示答案”的按钮,显然可以显示解决方案。
我使用FireBug查找Show Answer按钮的代码:
<input type="submit" onclick="key('0','1')" style="border: 1px solid rgb(51, 102, 153); margin-left: 1%;" value="Show Answer" name="Key">
我查看了FireBug的“DOM”标签,查看了关键功能的内部代码:
function key(pos, showAnsFlag) {
setYpos();
if (showAnsFlag == 1) {
document.forms[0].showAnswer.value = 1;
document.forms[0].hideAnswer.value = 0;
} else {
document.forms[0].hideAnswer.value = 1;
document.forms[0].showAnswer.value = 0;
}
document.forms[0].pos.value = "";
document.forms[0].keypos.value = pos;
document.forms[0].randpos.value = "";
document.forms[0].solpos.value = "";
document.forms[0].subaction.value = "key";
}
点击“显示解决方案”后,我还查看了Firebug的Net选项卡以发现POST参数:
Key Show Answer
RC_821796_0_0_821813 mc //[These are the names of the problems]
RC_821796_0_0_821813 1
RC_821796_0_1_821813 mc
RC_821796_0_1_821813 0
UserPass //[ERASED, because I'm not sure if it can be used maliciously]
feedback0 rmh
hideAnswer 0
hideSolution
keypos 0
pos
randpos
showAnswer 1
showSolution
solpos
struct CuDMAcAACEAuEuEaANErASAJANBPBjDABkCiAaAxAEEfAjCgAvAjDjDQCTDTCbBjAUBtDXDXBqEXAFAjEPAVEMESvVBVzUCcEwALAMCSBQDewWDTAPBUEBCeArESCmDWAfErAXETBFEoBDCEDxBODlCbAeEnCNEKDmDgBHAJESEKATDmAoEFAdCUALCiCLBXCcDFATAcDRDoCwERuUBTDKEkBKESCXATAbDRAwBYEFAeDREWDBCdCeElBJCPCSDtAeABBxDwDDByEPAwEVAtAoDADWCkCCBBAwDNCyEECEAlCeACDCAPCmAsDM
subaction key
ypos 196
好吧,当我“练习另一个版本”时,页面上就会出现这种情况。我的想法是,当我在普通页面而不是“显示另一个版本”页面时,我想调用“键”功能(或者至少是一个与它完全相同的功能)。问题是,当我检查普通页面的DOM时,它甚至没有可访问的密钥功能。
有没有办法在页面中注入javascript来强制调用key函数?最理想的情况是,有一个书签可以循环遍历所有问题,调用关键功能,并显示答案。
鉴于我缺乏知识,我不知道该尝试什么。我尝试过这样简单的事情(在地址栏中)
javascript:document.forms[0].showAnswer.value = 1;
而且我知道它有所作为,因为当我输入
时 javascript:alert(document.forms[0].showAnswer.value);
它提示“1”,但我不确定它到底在做什么,或者我还有什么要做。
修改
让我试着澄清一下 - 我不拥有该网站,所以我正在尝试做一些客户端的javascript工作来操纵网站做我想做的事(请注意,我甚至不确定这是可能的。)
在网站的一个部分,在名为“practice.tpl”的页面中,它允许我按下一个名为“显示答案”的按钮(该按钮调用上述键功能并显示解决方案)。
但是,在另一个页面上,按钮和功能不存在。所以我想知道我是否能以某种方式借用practice.tpl页面中的key函数,并将其注入另一个页面。
修改2
这是两个页面的源代码:
主页面(我试图注入代码的那一页) http://pastebin.com/r7KVMU1N
“额外问题”页面(关键功能所在的页面) 它不会让我发布多个链接 - 所以去除以下链接: http://pastebin.c[]om/D8Nc6fbk
答案 0 :(得分:0)
你可以在你的函数中对文档进行范围调整,这样你就可以正确地发送它(如果我正确地理解你的问题,那就很难理解了)
function key(pos, showAnsFlag, doc) {
setYpos();
if (showAnsFlag == 1) {
doc.forms[0].showAnswer.value = 1;
doc.forms[0].hideAnswer.value = 0;
} else {
doc.forms[0].hideAnswer.value = 1;
doc.forms[0].showAnswer.value = 0;
}
doc.forms[0].pos.value = "";
doc.forms[0].keypos.value = pos;
doc.forms[0].randpos.value = "";
doc.forms[0].solpos.value = "";
doc.forms[0].subaction.value = "key";
}
在您的顶级应用上:
key(value, value, document); // sending the local document (
弹出页面上的:
window.opener.key(value,value, document); // sending the local document
这是你想要做的吗?调用主'key'函数并让它作用于当前页面?
答案 1 :(得分:0)
你在那里一半。从我所看到的,show answers按钮更改隐藏表单字段的值,然后在页面上提交表单。它以相同的形式返回并填充了答案。
您
javascript:document.forms[0].showAnswer.value = 1;
是一半,但你需要提交表格,以便服务器可以给你新的表格(包括答案)。
javascript:document.forms[0].showAnswer.value = 1;document.forms[0].submit();
如果这是有效的javascript(我不写很多)可能会有效。您可能还需要考虑调用关键函数,而不是直接设置'showanswer'的值,具体取决于setYpos();
正在做什么。
如果你不想制作书签,你可能想要编写一个自动执行该javascript的greasemonkey脚本。
编辑:当然,通过指向页面/页面源的链接,我们可以提供更多帮助。