Blokowanie części javascript w pokazie slajdów


(koszmos) #1

Witam

Otóż problem wygląda następująco.

W pewnym typie szkolenia, kazano mi odczytywać informacje zawarte w pokazie slajdów zbudowanym na php

Sęk w tym że przycisk “dalej” uaktywnia się po 10 sekundach, oparte jest to na javascripcie z tego co udało mi się ustalić.

 

I teraz pytanie

Czy da się w jakiś sposób zablokować tę część odpowiedzialną za obliczanie czasu ?

Cała blokada javascriptu nie wchodzi w grę ponieważ blokuję również filmy

 

Pozdrawiam ( przeglądarka chrome )


(hindus) #2

Chcesz zmienić kod po stronie strony (serwera) czy u siebie w przeglądarce? Jeśli w przeglądarce (np. przy pomocy jakiejś wtyczki do odpalania JS na różnych stronach), musiałbyś po prostu odblokować przycisk wcześniej lub zmienić czas timeout’u (jeśli o to jest oparte odliczanie) na krótszy.


(koszmos) #3

Chciałbym uczynić to u siebie, ponieważ moja przeglądarka odczytuje ten kod i blokuje go.

Pytanie, jaką wtyczką to zrobić, lub jak bez. Próbowałem szukać, lecz udało mi się tylko zablokować całość


(hindus) #4

Nie rozumiem, blokuje go? Czyli skrypt działa nieprawidłowo? Chyba się zgubiłem co chcesz zrobić… Naprawić niedziałający (zablokowany przez przeglądarkę) skrypt, wyłączyć konieczność czekania 10 sekund, czy jeszcze coś innego?


(koszmos) #5

hindus

Miałem na myśli stwierdzenie że skoro nie jest to “moje dzieło” jedynym sposobem na zablokowanie tego jest ingerencja w przeglądarkę.

Mam chyba słuszne podejrzenie że to odpowiada za ten “Stoper”

});
		
			
			InitializeTimer(6);
				

});

		var czasy = [6,4,4,4,8,];
		var dalej = false;
		var secs;
		var timerID = null;
		var timerRunning = false;
		var delay = 1000;
		var obecnie = 0;
		var cwicz = 0;
		var typy = new Array();
		
		function InitializeTimer(s)
		{
		    // Set the length of the timer, in seconds
		    $('#btnDalej').attr('disabled', 'disabled');
		    secs = s;
		    StopTheClock();
		    StartTheTimer();
		}
		
		function StopTheClock()
		{
		    if(timerRunning)
		    {
		        clearTimeout(timerID);
		    }
		    timerRunning = false;
		}
		
		function StartTheTimer()
		{
			if (secs == 0)
			{
				StopTheClock();
			    $('#btnDalej').removeAttr('disabled');
			}
			else
			{
				self.status = secs;
				secs = secs - 1;
				timerRunning = true;
				timerID = self.setTimeout("StartTheTimer()", delay);
			}
		}

Natomiast pytanie, jak to zablokować, script zawiera się w kodzie strony/slajdu, nie jest oddzielnym plikiem do którego odwołuje się dany argument kodu, szukałem różnych dodatków, nic nie skutkuje, albo blokuje całość, albo nic.


(hindus) #6

Ok. Wykorzystaj dodatek Greasemonkey albo podobny, pozwala on na wykonanie swojego kodu Javascript. A wywołać musisz tylko to: 

StopTheClock();
			    $('#btnDalej').removeAttr('disabled');

(koszmos) #7

Dzięki wielkie

Niestety nie działa, może słuszniej zrobie jak wkleje całą zawartość scriptu

<script type="text/javascript">
		var wyslany = false;

$(document).ready(function() {
	
	$('#send').click(function(e) {
		e.preventDefault();
		$('#wiadomosc').toggle();
	});
	
	$('#wiadomosc_wyslij').click(function() {
		
		if($('#tresc').val().length)
		{
			$('#loader').show();
			$('#wiadomosc_tresc').load('/wyslij_wiadomosc', 
				{
					'temat' : $('#temat').val(),
					'tresc' : $('#tresc').val(),
					'email' : $('#email').val(),
					'tel' : $('#tel').val(),
					'kursant': $('#wiad_kursant').val(),
					'slajd' : $('#wiad_slajd').val(),
					'modul' : $('#wiad_modul_nr').val(),
				},
				function(a, b, c)
				{
				}
			);
		}
		else
		{
			alert('Proszę wpisać treść wiadomości!');
		}
	});
	
	$('#wiadomosc_zamknij').click(function(e) {
		e.preventDefault();
		$('#wiadomosc').hide();
	});
	
			$('#slajd_main_div p').css('padding-top', 30);
		
		window.scrollTo(0, 150);
		
		$('#btnPowrot').click(function() {
		    
			el_form = $('#form_dalej');
			el_form.find('#powrot').val(1);
			el_form.submit();
		});

		$('#form_dalej').submit(function() {
			if ($(this).find('#powrot').val() == 1) {
				$('#slajdmodul').val($('#slajdmodul_val').val());
				if (!wyslany) {
					wyslany = true;
					return true;
				} else {
					return false;
				}
				
			}
			
			if (secs <= 0) {
									var elem = $('#anim_'+obecnie);
		
					if (elem.length) {
						$('#anim_'+obecnie+', #anim_'+obecnie+'_0').css('visibility', 'visible');
						obecnie++;
							
							InitializeTimer(czasy[obecnie]);
											} else {
						$('#slajdmodul').val($('#slajdmodul_val').val());
						if (!wyslany) {
        					wyslany = true;
        					return true;
        				} else {
        					return false;
        				}
					}
		
					return false;
							} else {
				return false;
			}
				$('#slajdmodul').val($('#slajdmodul_val').val());
				if (!wyslany) {
					wyslany = true;
					return true;
				} else {
					return false;
				}
			});
		
			
			InitializeTimer(13);
				

});

		var czasy = [13,13,13,];
		var dalej = false;
		var secs;
		var timerID = null;
		var timerRunning = false;
		var delay = 1000;
		var obecnie = 0;
		var cwicz = 0;
		var typy = new Array();
		
		function InitializeTimer(s)
		{
		    // Set the length of the timer, in seconds
		    $('#btnDalej').attr('disabled', 'disabled');
		    secs = s;
		    StopTheClock();
		    StartTheTimer();
		}
		
		function StopTheClock()
		{
		    if(timerRunning)
		    {
		        clearTimeout(timerID);
		    }
		    timerRunning = false;
		}
		
		function StartTheTimer()
		{
			if (secs == 0)
			{
				StopTheClock();
			    $('#btnDalej').removeAttr('disabled');
			}
			else
			{
				self.status = secs;
				secs = secs - 1;
				timerRunning = true;
				timerID = self.setTimeout("StartTheTimer()", delay);
			}
		}

	</script>

 

Próbowałem również przyśpieszyć czas przeglądarki z pomocą cheath engine, lecz nic z tego.

Wątpie aby korzystał z czasu systemu…

 


(Drobok) #8

Jak chcesz skrócić czas to zmień:

secs = s;

Na 

secs = 0;

A jak chcesz coś konkretnego to wrzuć też html lub link do strony.

PS. te w/w funkcje są ok, tyle że musisz je wywołać przy każdym załadowaniu formularza.


(koszmos) #9

drobok:

Proszę http://wklej.to/jcAlY

Nie ma sensu zaśmiecać forum całym kodem

 

Natomiast, czas jest zmienny w zależności od slajdu


(Drobok) #10

Tak więc co ci nie działa ? 


(koszmos) #11

Tak jak pisałem wcześniej, widzimy w kodzie zawartego timera, nie jest to mój kod więc nie mogę tego zmienić.

Cały kod generuje pokaz slajdów, w którym mamy zaciemniony przycisk “dalej” przez czas określony w timerze 

Na prosty język: Zależy mi aby usunąć timera ( Wcześniej zaproponowany Greasemonkey nie działa ) lub też Aby zmniejszyć/Przyśpieszyć czas oczekiwania aż skończy odliczać i udostępni przycisk dalej. 

 

A już zupełnie prościej. Mam do przejścia “szkolenie” konkretnie kwalifikację przewozu, szkoła przygotowała stronę php pokaz slajdów, w którym zastosowała trick z zaciemnionym “Dalej” przez określony czas “teoretyczny na przeczytanie danego slajdu aby przejść na następny” slajdów zawiera się około 1000 i zabierają zbyteczne dla starego kierowcy informacje jak “Co oznacza R na skrzyni biegów” i tym podobne. Wolałbym znacząco móc klikać ciągle “Dalej” bez mozolnego oczekiwania i spokojnie zatrzymać się na informacjach które są dla mnie istotne. 


(Drobok) #12

Źle dodajesz skrypt w greasemonkey. Bowiem w konsoli wszystko działa ładnie jak powinno. Natomiast jeśli skrypt waliduje czas po stronie serwera to nie zrobisz kompletnie nic :wink:


(koszmos) #13

drobok:

Wątpię aby ktoś zbudował script prostego pokazu slajdów dla około 300 kursantów miesięcznie w oparciu o zapytania o czas przy każdym slajdzie, wydaje mi się że serwer by nie wytrzymał, chyba ze sporo zainwestowali w niego, ale sam styl budowy strony, błędy ortograficzne itd, nie pokazują zbytniego przyłożenia się do faktu.

Przeszukując scripty, również można natrafić na typowe komentarze z “gotowców” typu “tutaj wpisz czas” itd.

 

Jeszcze dodam script z panelu “trenera” gdzie funkcja “dalej” jest ciągle odblokowana

może to coś pomoże…

$(document).ready(function() { $('#slajd_main_div p').css('padding-top', 40); window.scrollTo(0, 150); var dalej = false; var secs; var timerID = null; var timerRunning = false; var delay = 1000; var obecnie = 0; var cwicz = 0; var czasy = new Array(); var typy = new Array(); $('#form_dalej').submit(function() { var elem = $('#anim_'+obecnie); if (elem.length) { $('#anim_'+obecnie+', #anim_'+obecnie+'_0').css('visibility', 'visible'); obecnie++; } else { return true; } return false; }); $('#btnPowrot').click(function() { $('#form_dalej #powrot').val(1); $('#form_dalej').submit();	}); }); function InitializeTimer(s) { // Set the length of the timer, in seconds $('#btnDalej').attr('disabled', 'disabled'); secs = s; StopTheClock(); StartTheTimer(); } function StopTheClock() { if(timerRunning) { clearTimeout(timerID); } timerRunning = false; } function StartTheTimer() { if (secs == 0) { StopTheClock(); $('#btnDalej').removeAttr('disabled'); } else { self.status = secs; secs = secs - 1; timerRunning = true; timerID = self.setTimeout("StartTheTimer()", delay); } }

 

Dodam że różnica też jest w usposobieniu pliku gdzie u “kursanta” jest wrzucony w kod tak jak dodałem wcześniej

Natomiast u trenera jest jedynie odniesienie script src=