Заимствование кода JavaScript с одной страницы для вставки на другую - PullRequest
0 голосов
/ 20 июня 2010

Хорошо, позвольте мне предвосхитить это, сказав, что у меня мало опыта программирования, поэтому я прошу прощения, если мое объяснение противоречит некоторому серьезному невежеству. Я всегда хотел научиться некоторым трюкам, но никогда не смогу найти никаких учебных пособий.

Вот сделка:

Есть веб-сайт, который дает вам различные научные вопросы и оценивает входные данные. Для каждого вопроса есть кнопка «Практика других версий», которая создает всплывающее окно с новой, похожей версией проблемы. Эта новая версия также имеет кнопку «Показать ответ», которая, очевидно, показывает решения.

Я использовал FireBug, чтобы найти код кнопки Показать ответ:

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

Я посмотрел на вкладку «DOM» FireBug, чтобы посмотреть внутренний код функции ключа:

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, чтобы узнать параметры 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 на страницу для принудительного вызова функции ключа? В оптимальном варианте было бы интересно иметь букмарклет, который просматривал все Вопросы, вызывал ключевую функцию и выявлял ответы.

Учитывая мой недостаток знаний, я не знал, что попробовать. Я пробовал простые вещи, как это (в адресной строке)

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

И я знаю, что он что-то сделал, потому что, когда я печатаю

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

Он запрашивает «1», но я просто не уверен, что именно он делает, или что мне еще нужно делать.

Редактировать

Позвольте мне попытаться уточнить - я не являюсь владельцем сайта, поэтому я пытаюсь выполнить какую-то работу на стороне клиента по javascript, чтобы манипулировать сайтом, делая то, что я хочу (заметьте, я даже не уверен это возможно).

В одной части сайта, на странице с названием "Practice.tpl", я могу нажать кнопку "Показать ответ" (кнопка вызывает вышеупомянутую ключевую функцию и раскрывает решение).

Однако на другой странице кнопка и функция не существуют. Поэтому мне было интересно, смогу ли я как-нибудь позаимствовать функцию ключа на странице practice.tpl и вставить ее на другую страницу.

Редактировать 2

Это исходный код двух страниц:

Главная страница (та, где я пытаюсь ввести код) http://pastebin.com/r7KVMU1N

Страница «Дополнительные проблемы» (та, где находится ключевая функция) http://pastebin.com/D8Nc6fbk

1 Ответ

1 голос
/ 20 июня 2010

При дальнейшей проверке это может оказаться невозможным, поскольку значения ключей, по-видимому, привязаны к тем struct параметрам, которые веб-сайт передает везде.

Тем не менее, вы можете попробовать этот технико-экономический тест. Требуется Firefox с Firebug.

  1. Войдите в раздел домашних заданий.

  2. Щелкните правой кнопкой мыши по пробелу слева от серой границы вопроса.

  3. Следует выбрать разделительный вопрос, например <div id="question3" class="waQBox container">. Если нет, выберите ближайший на вкладке HTML Firebug.

  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.

  11. В недавно вставленном блоке замените значение ввода UserPass на строку из шага 8.

  12. Нажмите кнопку Edit (редактирование завершено).

  13. Теперь на странице нажмите новую кнопку Show Answer.

  14. Что происходит? То, как сайт отвечает, определяет, возможен ли сценарий GM.

.

 <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>
...