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

从一个页面借用javascript代码注入另一个页面,javascript,greasemonkey,Javascript,Greasemonkey,好的,让我先说一下,我几乎没有编程经验,所以如果我的解释掩盖了一些严重的无知,我很抱歉。我一直想学一些技巧,但我找不到任何教程 交易如下: 有一个网站可以给你各种各样的科学问题,并为你的输入打分。对于每个问题,都有一个名为“练习其他版本”的按钮,该按钮会生成一个弹出框,其中包含问题的新的类似版本。这个新版本还有一个名为“Show Answer”的按钮,它显然显示了解决方案 我使用FireBug查找“显示答案”按钮的代码: <input type="submit" onclick="key(

好的,让我先说一下,我几乎没有编程经验,所以如果我的解释掩盖了一些严重的无知,我很抱歉。我一直想学一些技巧,但我找不到任何教程

交易如下:

有一个网站可以给你各种各样的科学问题,并为你的输入打分。对于每个问题,都有一个名为“练习其他版本”的按钮,该按钮会生成一个弹出框,其中包含问题的新的类似版本。这个新版本还有一个名为“Show Answer”的按钮,它显然显示了解决方案

我使用FireBug查找“显示答案”按钮的代码:

<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是必需的

  • 登录家庭作业部分

  • 右键单击灰色问题边框左侧的空白

  • 应选择问题div,如
    。如果没有,请在Firebug的HTML选项卡中选择最近的一个

  • 编辑
    按钮

  • 使用搜索功能将所有代码复制并粘贴到任何文本编辑器中

  • 搜索“
    提交新答案”

  • 找到的行应该包含如下文本:
    return submit\u this({BIG HONKING STRING}),true

    复制大喇叭串的值,你马上就需要它了

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

  • 返回Firebug;滚动到编辑框的底部;然后将代码粘贴到上一个
    的第三个代码的正上方

  • 在新粘贴的块中,将
    struct
    input的值替换为步骤7中的大喇叭字符串

  • 在新粘贴的块中,将
    UserPass
    input的值替换为步骤8中的字符串

  • 按下编辑按钮(编辑完成)

  • 现在,在页面上,按新建
    Show Answer
    按钮

  • 发生了什么?站点的响应方式决定了GM脚本是否可行

  • 
    
    这是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>