renegeuze
%Europe/Berlin %280 %2009, 07:43
Hoi,
Ik probeer van wat sites zonder fatsoenlijke API wat data te verkrijgen. De source sites maken dynamisch een js bestand aan waar alleen document.write('data') staat. XMLHttpRequest zal daarom wel niet kunnen werken.
Wat dus op mijn pagina komt te staan is:
<script language="Javascript" src="http://apexwebgaming.com//current_stats.php?style=6&id=518"></script>
Dat is de normale manier om de data van de source site naar mijn site te krijgen. Maar de source site wil nog weleens erg langzaam zijn waardoor mijn pagina ook niet verder zal laden.
Nou heb ik dat laatste 99% opgelost door het script helemaal aan het einde net voor mijn </body> tag te zetten maar dan nog blijf je met een irritant zandlopertje zitten.(en IE heeft een bepaald script nodig on pageload wegens een ander zeer oud probleem)
Ik heb al geprobeerd simpelweg het hele <script> element te verwijderen on success of na +/- 5 seconden maar IE7 geeft een hele dikke foutmelding en crasht volledig omdat het blijkbaar zijn "parent" <script> element nodig heeft. IE6 negeert het probleem en IE8 crasht tenminste niet. Alle andere browsers doen uiteraard niet moeilijk en kappen de filerequest eigenlijk automatisch af.
Dus wat ik graag zou willen is dat ik de filerequest kan stoppen voordat ik het <script> element verwijder.
Een andere oplossing(bijvoorbeeld alsnog xmlhttprequest werkend krijgen) mag natuurlijk ook!
edit: toch maar het gehele script plaatsen.
<script type="text/javascript" src="http://www.alliancesatwar.com/js/tribe.js?v=01"></script>
<div style="display:none;">
<p id="twgRankSource"><script language="Javascript" src="http://www.topwebgames.com/games/placement.js?id=744"></script></p>
<p id="apexRankSource"><script language="Javascript" src="http://apexwebgaming.com//current_stats.php?style=6&id=518"></script></p>
<p id="apexTimeSource"><script language="Javascript" src="http://apexwebgaming.com//time_left.php?style=3"></script></p>
</div>
En dan het script met gebruik van jQuery
checkVoting = function(e){
if($("#"+e+"Source").text()){
$("#"+e+"Target").text($("#"+e+"Source").text());
$("#"+e+"Source").remove();
timer = eval(e+"Timer");
clearTimeout ( timer );
} else if(i>10){// i of 10 is just a few seconds. +3 per 1.5 second if all 3 files are still to be loaded.
$("#"+e+"Target").text("(Operation timed out.)");
//$("#"+e+"Source").remove();//*** IE again. Can't remove an element as long as the script is being requested and I don't know how to kill a request/load.
timer = eval(e+"Timer");
clearTimeout ( timer );
}
i++;
}
//to be clear, this only works for voting sites that use document.write as "api"
twgRankTimer = setInterval ('checkVoting("twgRank")', 500 );
apexRankTimer = setInterval ('checkVoting("apexRank")', 500 );
apexTimeTimer = setInterval ('checkVoting("apexTime")', 500 );
Ja ik weet dat mijn script nogal "evil" is [:o)]
Voor de duidelijkheid, het script zal niet crashen in IE als het bestand wel op tijd geladen is.
Ik probeer van wat sites zonder fatsoenlijke API wat data te verkrijgen. De source sites maken dynamisch een js bestand aan waar alleen document.write('data') staat. XMLHttpRequest zal daarom wel niet kunnen werken.
Wat dus op mijn pagina komt te staan is:
<script language="Javascript" src="http://apexwebgaming.com//current_stats.php?style=6&id=518"></script>
Dat is de normale manier om de data van de source site naar mijn site te krijgen. Maar de source site wil nog weleens erg langzaam zijn waardoor mijn pagina ook niet verder zal laden.
Nou heb ik dat laatste 99% opgelost door het script helemaal aan het einde net voor mijn </body> tag te zetten maar dan nog blijf je met een irritant zandlopertje zitten.(en IE heeft een bepaald script nodig on pageload wegens een ander zeer oud probleem)
Ik heb al geprobeerd simpelweg het hele <script> element te verwijderen on success of na +/- 5 seconden maar IE7 geeft een hele dikke foutmelding en crasht volledig omdat het blijkbaar zijn "parent" <script> element nodig heeft. IE6 negeert het probleem en IE8 crasht tenminste niet. Alle andere browsers doen uiteraard niet moeilijk en kappen de filerequest eigenlijk automatisch af.
Dus wat ik graag zou willen is dat ik de filerequest kan stoppen voordat ik het <script> element verwijder.
Een andere oplossing(bijvoorbeeld alsnog xmlhttprequest werkend krijgen) mag natuurlijk ook!
edit: toch maar het gehele script plaatsen.
<script type="text/javascript" src="http://www.alliancesatwar.com/js/tribe.js?v=01"></script>
<div style="display:none;">
<p id="twgRankSource"><script language="Javascript" src="http://www.topwebgames.com/games/placement.js?id=744"></script></p>
<p id="apexRankSource"><script language="Javascript" src="http://apexwebgaming.com//current_stats.php?style=6&id=518"></script></p>
<p id="apexTimeSource"><script language="Javascript" src="http://apexwebgaming.com//time_left.php?style=3"></script></p>
</div>
En dan het script met gebruik van jQuery
checkVoting = function(e){
if($("#"+e+"Source").text()){
$("#"+e+"Target").text($("#"+e+"Source").text());
$("#"+e+"Source").remove();
timer = eval(e+"Timer");
clearTimeout ( timer );
} else if(i>10){// i of 10 is just a few seconds. +3 per 1.5 second if all 3 files are still to be loaded.
$("#"+e+"Target").text("(Operation timed out.)");
//$("#"+e+"Source").remove();//*** IE again. Can't remove an element as long as the script is being requested and I don't know how to kill a request/load.
timer = eval(e+"Timer");
clearTimeout ( timer );
}
i++;
}
//to be clear, this only works for voting sites that use document.write as "api"
twgRankTimer = setInterval ('checkVoting("twgRank")', 500 );
apexRankTimer = setInterval ('checkVoting("apexRank")', 500 );
apexTimeTimer = setInterval ('checkVoting("apexTime")', 500 );
Ja ik weet dat mijn script nogal "evil" is [:o)]
Voor de duidelijkheid, het script zal niet crashen in IE als het bestand wel op tijd geladen is.