Нужна помощь по JavaScript
659 повідомлень
#15 років тому
Уважаемые фрилансеры , ситуация следущая :Сейчас пишу программу (на Turbo Delphi) , которая автоматически должна заполнять всяческие опросы (однотипные) .
Типичный вопрос состоит из текста вопроса и НТМЛ формы с вариантами ответа . Когда один вариант выбран ,
нужно кликнуть по баннеру , после чего откроется новое окно браузера (или вкладка) , в котором пойдет обратный отсчет
времени . После отщета появляется ссылка , кликнув которую мы закрываем вкладку (или окно) , а в окне с вопросом происходит
загрузка новой страницы с новым вопросом . Собственно , скрипты это и есть главная проблема .
Из программы можно изменять HTML код отображаемой страницы без ее перезагрузки , но пока я не пойму смысл ява скриптов мне это врятли поможет .
Прилагаю коды страниц (выбора вопроса и обратного отщета) с которыми возникли проблемы .
Часть страницы с вопросом :
<div id="main" style="margin-left:244px;">
<h4>Заполнение анкеты "Торжественное мероприятие "SWB"! (30 вопросов)"</h4>
<div>Подождите <span id="timeout">1</span> сек.</div>
<div id="survey-credit">Стоимость анкеты 1.00 SWB</div>
<form action="/profile/survey/id/77" method="post" name="survey">
<input type="hidden" name="survey" value="45307" />
<input type="hidden" name="survey" value="a879f2a98e035c329f248bc963a657bb" id="survey__csrf_token" />
<div>Билет 7.Вы успеваете приобрести пригласительные для своих друзей?</div>
<ul id="choices">
<li>
<ul class="radio_list"><li class="border-none width-auto"><input class="border-none width-auto" name="survey" type="radio" value="225371" id="survey_answer_225371" /> <label class="border-none width-auto" for="survey_answer_225371">А кажется, успеваю</label></li>
<li class="border-none width-auto"><input class="border-none width-auto" name="survey" type="radio" value="225372" id="survey_answer_225372" /> <label class="border-none width-auto" for="survey_answer_225372">В успеваю, однозначно</label></li>
<li class="border-none width-auto"><input class="border-none width-auto" name="survey" type="radio" value="225373" id="survey_answer_225373" /> <label class="border-none width-auto" for="survey_answer_225373">С знаю, где взять в последний момент</label></li></ul> </li>
</ul>
<!--button type="submit" class="hover-bt" style="display:none" name="submit_btn"
><span class="s1"> </span
><span class="main short">Ответить</span
><span class="s2"> </span
></button-->
</form>
<div class="help">Нажмите на банер для продолжения</div>
<div id="survey_fill_banner"><a href='/profile/surveyWait' target='_blank'><img src='/banners/data/128_banners.png'></a></div>
<script type="text/javascript"><!--
var timeout = document.getElementById('timeout'), timeOut = 1 || 1, clicked = false,
a_url, refreshCaptcha = document.getElementById('refreshCaptcha');
if(refreshCaptcha){
refreshCaptcha.__src = document.images.getAttribute('src');
refreshCaptcha.onclick = function(){
document.images.setAttribute('src',refreshCaptcha.__src+'?id='+(new Date));
return false;
};
}
$(document.survey).onEvent('submit', $.event.preventDefault);
$('#survey_fill_banner a').onEvent('click', $.event.preventDefault);
setTimeout(function(){
if(!(--timeOut)){
var form = document.survey, banner = document.getElementById('survey_fill_banner'),
a = banner.getElementsByTagName('a');
a && $(a).onEvent('click', function(){
//$(document.survey.submit_btn).css('display', '');
$('#survey_fill_banner').prev().css('display','none');
if(!a_url) a_url = this.href;
if(this.href.indexOf('?url') == -1) this.href = "/profile/surveyWait?url="+a_url;
});
timeout.parentNode.style.display = 'none';
}else{
timeout.innerHTML = Number(timeout.innerHTML)-1;
setTimeout(arguments.callee, 1000);
}
}, 1000);
//--></script>
<noscript>
Для продолжения Вам необходимо включить JavaScript </noscript>
<div class="clear"></div>
</div>
</div>
</div>
Страница ожидания :
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="title" content="Заполнение анкеты. Ожидание... " />
<title>Заполнение анкеты. Ожидание... </title>
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="stylesheet" type="text/css" media="screen" href="/css/main.css" />
<link rel="stylesheet" type="text/css" media="screen" href="/css/menu.css" />
<script type="text/javascript" src="/js/sjs/sjs.js"></script>
<script type="text/javascript" src="/js/sjs/sjs.animate.js"></script>
<script type="text/javascript" src="/js/sjs/sjs.request.js"></script>
<script type="text/javascript" src="/js/front.js"></script>
<script type="text/javascript" src="/js/ajax-helper.js"></script>
<!--><script type="text/javascript">
$.ready(function(){
$('button.hover-bt').hover(function(){
$(this).setClass('hover')
},function(){
$(this).removeClass('hover')
})
})//*/
</script><!-->
</head>
<body>
<table cellpadding="0" cellspacing="0" height="100%" width="100%" class="table table-no-border">
<tr height="10px"><td style="top:0;width:100%">
<table cellpadding=0 cellspacing=0 width="100%">
<tr><td>
Подождите <span id="timeout">2</span> сек. </td></tr>
</table>
</td></tr>
<tr><td>
<iframe frameborder="0" id="rf" scrolling="auto" src="http://swblife.com/news/109" style="width:100%; height:100%"></iframe>
</td></tr>
<tr height="10px"><td style="top:0;width:100%">
<table cellpadding=0 cellspacing=0 width="100%">
<tr><td id="next-question"></td></tr>
</table>
</td></tr>
</table>
<script type="text/javascript"><!--
var frame = document.getElementById('rf');
frame && frame.contentWindow && frame.contentWindow.focus();
var timeOut = Number("2"), timeout = $('#timeout');
if(window.opener){
window.form = window.opener.document.survey;
function query(url){
if($.query){
$.query(url);
}else{
location.href = url;
}
}
function onTimeouted(){
if(!(--timeOut)){
var next = document.getElementById('next-question');
next.innerHTML = '<a href="/index.php?timeouted=yes" onclick="form.submit(); window.close()">Перейти к следующему вопросу</a>';
timeout.parentNode.innerHTML = '';
Boolean("1") && query("/profile/surveyWait/timeouted/yes");
}else{
timeout.innerHTML = Number(timeout.innerHTML)-1;
setTimeout(arguments.callee, 1000);
}
}
if(isNaN(timeOut)) timeOut = 0;
timeOut && setTimeout(onTimeouted, 1000) || ++timeOut && onTimeouted();
}
//--></script>
</body>
</html>
Очень прошу всех кто смыслит в Java Script помочь мне разобраться , обьяснить что делают скрипты !
Заранее спасибо !
626 повідомлень
#15 років тому
Основной совет - почитать про HTTP, попутно выяснив что такое AJAX и как оно работает.Потом перестать закручивать шурупы утюгом, взять нормальный скриптовой язык с CURL и на нём всё сделать без геморроя.
659 повідомлень
#15 років тому
Так ничего вы и не обьяснили . Можете просто прописать комментарии к ява скриптам и не беспокоится о моих проблемах , связанных с реализацией алгоритма ?
626 повідомлень
#15 років тому
Оставьте в покое JS. Тем более что его на странице слишком много, а Вы его не показываете (тэги script в head).Возьмите FF с FB и посмотрите какие ходят запросы в процессе заполнения форм и нажимания на кнопки - вот эти запросы Вам и нужно съэмулировать.
Про Ваш алгоритм (в смысле последовательность действий) мне ничего не известно, поэтому я про него ничего и не говорю, но вот инструмент Вы выбрали крайне не подходящий.
Поэтому я и упомянул утюг - отвёрткой делать тоже самое намного проще и удобней (и быстрее).
Проще говоря - не нужно возиться с JS, т.к. сервер про это всё равно ничего не узнает.