Как внедрить функцию JavaScript с одной страницы на другую - PullRequest
1 голос
/ 18 июня 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.c[]om/D8Nc6fbk

Ответы [ 2 ]

0 голосов
/ 18 июня 2010

Ты на полпути.Из того, что я вижу, кнопка Показать ответы изменяет значение скрытого поля формы, а затем отправляет форму на странице.Он возвращается с той же формой и заполненными ответами.

Ваш javascript:document.forms[0].showAnswer.value = 1; находится на полпути, но вам необходимо отправить форму, чтобы сервер мог предоставить вам новую форму (с включенными ответами).

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

может работать, если это допустимый JavaScript (я не пишу в нем много).Вы также можете рассмотреть возможность вызова ключевой функции вместо установки значения 'showanswer' напрямую в зависимости от того, что делает setYpos();.

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

Редактировать: Конечно, со ссылкой на источник страницы / страницы мы могли бы оказать дополнительную помощь.

0 голосов
/ 18 июня 2010

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

 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

это то, что вы пытаетесь сделать? вызвать основную функцию «ключ» и заставить ее действовать на текущей странице?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...