从一个页面借用javascript代码以在另一个页面中注入

时间:2010-06-20 02:28:28

标签: javascript greasemonkey

好吧,让我先说一下我的编程经验很少,所以如果我的解释掩盖了一些严重的无知,我会道歉。我一直想学习某些技巧,但我找不到任何教程。

这是交易:

有一个网站可以为您提供各种科学问题并对输入进行评分。对于每个问题,都有一个名为“练习其他版本”的按钮,它会生成一个弹出框,其中包含一个新的相似版本的问题。这个新版本还有一个名为“显示答案”的按钮,显然可以显示解决方案。

我使用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.com/D8Nc6fbk

1 个答案:

答案 0 :(得分:1)

在进一步检查时,这可能无法实现,关键值似乎被锁定在网站遍布各处的struct参数中。

不过,您可以尝试这种可行性测试。需要带Firebug的Firefox。

  1. 登录家庭作业部分。

  2. 右键单击灰色问题边框左侧的空白区域。

  3. 应选择问题分组,例如<div id="question3" class="waQBox container">。如果没有,请在Firebug的HTML选项卡中选择最近的一个。

  4. 按下Edit按钮。

  5. 将所有代码复制并粘贴到任何带搜索功能的文本编辑器中。

  6. 搜索“Submit New Answers To”。

  7. 找到的行应包含以下文字:return submit_this('{BIG HONKING STRING}',true 复制BIG HONKING STRING的值,马上就需要它。

  8. 搜索UserPass=。复制='之间的值。

  9. 回到Firebug;滚动到编辑框的底部;并粘贴在下面的代码中,恰好位于第三个</div>之上。

  10. 在新粘贴的块中,将struct输入的值替换为步骤7中的BIG HONKING STRING。

  11. 在新粘贴的块中,将UserPass输入的值替换为步骤8中的字符串。

  12. 按下Edit按钮(编辑完成)。

  13. 现在,在页面上,按下新的Show Answer按钮。

  14. 会发生什么?网站如何响应确定是否可以使用GM脚本。

  15.  <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>
    
相关问题