如何将javascript函数从一个页面注入另一个页面

时间:2010-06-18 17:39:37

标签: javascript dom post

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

这是交易:

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

我使用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

2 个答案:

答案 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脚本。

编辑:当然,通过指向页面/页面源的链接,我们可以提供更多帮助。