2010-06-18 128 views
1

好吧,讓我先說這個,說我沒有什麼編程經驗,所以如果我的解釋隱瞞了一些嚴重的無知,我很抱歉。我一直想學習一些技巧,但我永遠找不到任何教程。如何從一個頁面插入一個JavaScript函數到另一個頁面

這裏的交易:

有一個網站,爲您提供各種科學問題和檔次的輸入。對於每個問題,都有一個名爲「練習其他版本」的按鈕,它會生成一個彈出框,其中包含新的類似版本的問題。這個新版本還有一個名爲「顯示答案」的按鈕,顯然,它顯示瞭解決方案。

我用螢火找到顯示答案按鈕的代碼:

<input type="submit" onclick="key('0','1')" style="border: 1px solid rgb(51, 102, 153); margin-left: 1%;" value="Show Answer" name="Key"> 

我看着螢火蟲的「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"; 
} 

我又看了看螢火蟲的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 

好吧,當我「練習另一個版本」時,所有內容都在頁面上。我的想法是,當我在普通頁面上時,我想調用「key」函數(或至少一個與它完全相同的函數),而不是「顯示另一個版本」頁面。問題是,當我檢查正常頁面的DOM時,它甚至沒有可訪問的鍵功能。

有什麼辦法可以在頁面中注入JavaScript來強制調用密鑰函數嗎?最理想的做法是,在所有的問題中加入一個小書籤,調用關鍵函數並揭示答案。

鑑於我缺乏知識,我不知道該怎麼嘗試。我試着像這樣簡單的事情(在地址欄中)

javascript:document.forms[0].showAnswer.value = 1; 

而且我知道它做了什麼,因爲當我輸入

javascript:alert(document.forms[0].showAnswer.value); 

它會提示「1」,但我只是不知道它究竟在做什麼,或者我還有什麼要做。

編輯

讓我試着clarify--我沒有自己的網站,所以我試圖做一些客戶端JavaScript的工作來操縱網站去做我想要的(記你,我甚至不確定這是可能的)。

在網站的一個部分,在一個名爲「practice.tpl」的頁面中,它允許我按下一個名爲「Show Answer」的按鈕(按鈕調用前述的關鍵功能並顯示解決方案)。

但是,在另一頁上,按鈕和函數不存在。所以我想知道我是否可以藉助practice.tpl頁面中的關鍵函數,並將它注入到另一個頁面中。

編輯2

這是兩個頁面的源代碼:

首頁(就是我試圖將代碼注入) http://pastebin.com/r7KVMU1N

「額外的問題」頁面(關鍵功能之一) 它不會讓我發佈多個鏈接 - 所以去掉以下鏈接: http://pastebin.c[]om/D8Nc6fbk

+0

您能否將我們鏈接到該頁面,那麼我們可能會幫助更多? – vimist 2010-06-18 18:09:01

+0

下面是兩個頁面的源代碼: 主頁(就是我試圖將代碼注入) http://pastebin.com/r7KVMU1N 「額外的問題」頁面(就是那關鍵功能是) http://pastebin.com/D8Nc6fbk – 2010-06-18 21:16:19

回答

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 

這是你想要做什麼?調用主'鍵'功能並使其在當前頁面上執行?

+0

讓我試着澄清 - 我沒有自己的網站,所以我試圖做一些客戶端的JavaScript工作來操縱網站做什麼我想(請注意,我甚至不確定這是可能的)。 在網站的一部分中,在一個名爲「practice.tpl」的頁面中,它允許我按下名爲「顯示答案」的按鈕(該按鈕調用前述的關鍵功能並顯示解決方案)。 但是,在另一頁上,按鈕和函數不存在。所以我想知道我是否可以藉助practice.tpl頁面中的關鍵函數,並將它注入到另一個頁面中。 – 2010-06-18 18:20:21

0

你已經走了一半。根據我所看到的,「顯示答案」按鈕可更改隱藏表單域的值,然後在頁面上提交表單。它回來了相同的形式和答案填充。

你的 javascript:document.forms[0].showAnswer.value = 1; 是那裏的一半,但你需要提交表單,所以服務器可以給你新的形式(包括答案​​)。

javascript:document.forms[0].showAnswer.value = 1;document.forms[0].submit();

可以工作,如果是有效的JavaScript(我不寫了)。您可能還想考慮調用關鍵函數,而不是直接設置'showanswer'的值,具體取決於setYpos();正在做什麼。

如果您不想製作書籤,您可能需要考慮編寫一個可自動執行該javascript的greasemonkey腳本。

編輯:當然,鏈接到頁面/頁面源,我們可以給予更多的幫助。

+0

當我在地址欄中鍵入JavaScript時,螢火蟲想出了這個錯誤: document.forms [0] .showAnswer is undefined 這意味着,我認爲,窗體沒有showAnswer屬性主頁,但他們在「練習問題」頁面上進行。無論如何要讓表單具有showAnswer屬性?查找表單所有屬性的代碼是什麼? – 2010-06-18 21:08:38

+0

您可以看到螢火蟲中的所有表單項目,隱藏或不隱藏。 JavaScript所做的只是改變一個隱藏的。有機會你只能在測試問題上顯示答案,而不能在我認爲是主要測試的情況下。他們必須在服務器端對其進行編程以查看該表單項並返回答案。 – Davis 2010-06-18 23:42:50

+0

我發佈了上述網站的來源 - 您可以看看嗎? – 2010-06-19 01:07:56

相關問題