从一个页面借用javascript代码注入另一个页面
好的,让我先说一下,我几乎没有编程经验,所以如果我的解释掩盖了一些严重的无知,我很抱歉。我一直想学一些技巧,但我找不到任何教程 交易如下: 有一个网站可以给你各种各样的科学问题,并为你的输入打分。对于每个问题,都有一个名为“练习其他版本”的按钮,该按钮会生成一个弹出框,其中包含问题的新的类似版本。这个新版本还有一个名为“Show Answer”的按钮,它显然显示了解决方案 我使用FireBug查找“显示答案”按钮的代码:从一个页面借用javascript代码注入另一个页面,javascript,greasemonkey,Javascript,Greasemonkey,好的,让我先说一下,我几乎没有编程经验,所以如果我的解释掩盖了一些严重的无知,我很抱歉。我一直想学一些技巧,但我找不到任何教程 交易如下: 有一个网站可以给你各种各样的科学问题,并为你的输入打分。对于每个问题,都有一个名为“练习其他版本”的按钮,该按钮会生成一个弹出框,其中包含问题的新的类似版本。这个新版本还有一个名为“Show Answer”的按钮,它显然显示了解决方案 我使用FireBug查找“显示答案”按钮的代码: <input type="submit" onclick="key(
<input type="submit" onclick="key('0','1')" style="border: 1px solid rgb(51, 102, 153); margin-left: 1%;" value="Show Answer" name="Key">
在单击“显示解决方案”后,我还查看了Firebug的Net选项卡以发现POST参数:
好的,当我“练习另一个版本”时,页面上的所有内容。我的想法是,当我在正常页面上,而不是在“显示另一个版本”页面上时,我想调用“key”函数(或者至少是一个与之完全相同的函数)。问题是,当我检查普通页面的DOM时,它甚至没有可访问的键函数
有没有办法在页面中注入javascript来强制调用key函数?最理想的情况是,有一个bookmarklet可以循环所有问题,调用关键函数,并显示答案
考虑到我知识贫乏,我不知道该尝试什么。我尝试过这样简单的事情(在地址栏中)
我知道它做了些什么,因为当我打字的时候
javascript:alert(document.forms[0].showAnswer.value);
它会提示“1”,但我只是不确定它到底在做什么,或者我还必须做什么
编辑
让我试着澄清一下——我并不拥有这个网站,所以我正在尝试做一些客户端javascript工作来操纵这个网站,让它做我想做的事情(请注意,我甚至不确定这是否可行)
在站点的一部分,在一个名为“practice.tpl”的页面中,它允许我按下一个名为“Show Answer”的按钮(该按钮调用前面提到的键函数并显示解决方案)
但是,在另一个页面上,按钮和功能不存在。所以我想知道我是否可以借用practice.tpl页面中的键函数,并将其注入另一个页面
编辑2
这是两页的源代码:
主页(我正试图在其中注入代码)
“额外问题”页面(关键功能所在的页面)
进一步检查时,这可能不可能,键值似乎被锁定在网站到处传递的
struct
参数中
不过,你可以试试这个可行性测试。Firefox与Firebug是必需的
。如果没有,请在Firebug的HTML选项卡中选择最近的一个编辑
按钮向
提交新答案”return submit\u this({BIG HONKING STRING}),true
复制大喇叭串的值,你马上就需要它了
UserPass=
。复制=
和'
之间的值
的第三个代码的正上方struct
input的值替换为步骤7中的大喇叭字符串UserPass
input的值替换为步骤8中的字符串Show Answer
按钮
这是Demostenes--我刚得到一个帐户。我不确定是否将您的代码放在了正确的区域。下面是粘贴并按照您的说明操作后代码下半部分的样子:。单击“显示答案”后网站把我带到头版,说我的SessionId已经过期。即使填写了正确的RN_uuID,它仍然失败。步骤10中粘贴的struct
的值看起来短得令人怀疑。事实上,当一个有效的struct应该在300个字符范围内时,它正好在200个字符处。可能是您使用的编辑器g缩短?再试一次,如果结构真的那么短,但仍然不起作用,那么它表明该站点正在进行状态跟踪——这使得修改它的工作变得非常非常困难。好吧,那么。我用记事本++和Chrome再次尝试了一切,但出现了一个不同的错误。而不是让我回到主页p上个月,该网站刚刚将我带到一个页面,上面写着“显示请求的练习问题时出现问题”,Chrome抛出了错误“未捕获错误:内容脚本中不支持Chrome.extension.getBackgroundPage。有关详细信息,请参阅内容脚本文档。”有什么想法吗?即使这不起作用,我觉得我学到了很多。非常感谢您的耐心。“显示请求的练习问题时出现问题”
可能意味着三件事之一:(1)结构和可能的RN\uid
之间不匹配(2)主页上的结构是不合适的,因为其中一个内部变量与实践页面所期望的不同
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
javascript:document.forms[0].showAnswer.value = 1;
javascript:alert(document.forms[0].showAnswer.value);
<form enctype="x-www-form-urlencoded" action="/v4cgi/student/practice.tpl" name="practice" id="practice" method="post">
<!-- ***** Javascript REQUIRED to copy current UserPass value.
-->
<input type="hidden" value="ceeb69f9b47e5660110d5ab7e27ba168" id="UserPass" name="UserPass">
<input id="struct" name="struct" type="hidden" value="AYCJDoEaCWEbEVErBsBKAbBeDJEEDUBYDEDcDrEhCCBXAkEgBoExDGCDCxBODKBAAWAhAtDIAgCOAQAHACClAnCiCHCMBbEECLBICgBVALCHEhzUCxAxCrzZBPEHEiBSASDfCRCKCFBxDKCCBKCNvVCWBSBbAIAlDVCnBEEkAkBlBuCAEKCLDMDpAHBqCsCcEdAlBiDfCjErAUBTDmEoDqAcEVCfAyBPEJAeABBSEoEpDdEEwWDjCiCNAaESABCdEkDABKDoEuCvAOCRCLCFDfDeClBmAdAuAhELDeEoEnCNBoCOBgAFBfAr">
<input type="hidden" value="key" id="subaction" name="subaction">
<input type="hidden" value="" id="pos" name="pos">
<input type="hidden" value="0" id="keypos" name="keypos">
<input type="hidden" value="" id="randpos" name="randpos">
<input type="hidden" value="" id="solpos" name="solpos">
<!-- ***** Javascript desired. "7" to window.pageYOffset
-->
<input type="hidden" value="7" id="ypos" name="ypos">
<input type="hidden" value="1" id="showAnswer" name="showAnswer">
<input type="hidden" value="0" id="hideAnswer" name="hideAnswer">
<input type="hidden" value="" id="showSolution" name="showSolution">
<input type="hidden" value="" id="hideSolution" name="hideSolution">
<input type="hidden" value="r" id="feedback0" name="feedback0">
<!-- ***** If this value is required, then the whole process may be very difficult.
But it's probably not.
-->
<input type="text" id="RN_821703_0_0_821745" name="RN_821703_0_0_821745" value="">
<input type="submit" value="Show Answer" name="Key">
</form>