Pięknie się wyświetla ale ma jeden feler: serwer jest bardzo wolny i
blokuje ładowanie się strony (wykonywanie innych skryptów) czasem o
kilkadziesiąt sekund. Czy da się bez angażowania programowania po
stronie serwera załadować i wykonać ten skrypt asynchronicznie? Dodanie
async=true nie zadziała gdyż skrypt zwraca document.write(...) więc musi
się wykonać dokładnie w tym miejscu gdzie ma się pogoda wyświetlić.
Ajax też nie zadziała bo wywołanie jest między domenowe.
Czy jest jeszcze jakiś sposób?
--
Pozdrawiam
Marek
Cezary Tomczyk
unread,
May 8, 2013, 3:23:14 AM5/8/13
Delete
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
Ja bym zrobił tak:
<div class="box">
<script>
var s = document.createElement('script'),
head = document.head || document.getElementsByTagName('head')[0];
s.async = 'async';
s.src = 'http://www.pogodynka.pl/widget/get/gdansk_gdansk/?a1=FFFFFF&a2=0088FF';
head.insertBefore(s, head.firstChild);
</script>
</div>
"Ale"... to wcale nie musi być rozwiązanie problemu. "Pogodynka" po załadownaniu script-u może uruchamiać taką ilość requestów, że "zapycha" się maksymalna ilość requestów, jakie może wykonać przeglądarka dla jednej lokalizacji w tym samym czasie.
Spróbuj jeszcze uruchomić powyższe po załadowaniu zawartości strony:
<div class="box">
<script>
window.onload = function () {
var s = document.createElement('script'),
head = document.head || document.getElementsByTagName('head')[0];
s.async = 'async';
s.src = 'http://www.pogodynka.pl/widget/get/gdansk_gdansk/?a1=FFFFFF&a2=0088FF';
head.insertBefore(s, head.firstChild);
};
</script>
</div>
1. Nie zostanie wykonany kod JS lecz tylko wstawiony. Czy tak? Parser
kodu JS browsera dawno przeszed� ten fragment wi�c wstawienie w to
miejsce czegokolwiek nie spowoduje wykonania tego kodu. Trzeba by
wywo�a� eval() tego co przyjdzie.
2. Nawet je�li ten kod uda�oby si� wykona� to efekt jego pracy powstanie
w sekcji <head>, co b�dzie nieprawid�ow� lokalizacj� dynamicznie
wygenerowanego kodu. W ko�cu chcemy aby prognoza pogody wy�wietli�a si�
gdzie� w tre�ci strony WWW a nie w nag��wku.
--
Pozdrawiam
Marek
ABC
unread,
May 8, 2013, 3:11:58 PM5/8/13
Delete
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
W dniu 07.05.2013 23:24, Marek pisze:
> Czy jest jeszcze jakiś sposób?
Może napisać kawałek kodu w PHP:
* pobrać URL
* wywalić document.write('...') i zostanie sam HTML
* wstawić w kod strony
Można tez dorobić cache, aby nie pobierać prognozy przy każdej odsłonie
strony.
Marek
unread,
May 9, 2013, 2:23:48 AM5/9/13
Delete
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
W dniu 2013-05-08 21:11, ABC pisze:
> W dniu 07.05.2013 23:24, Marek pisze:
>> Czy jest jeszcze jakiś sposób?
>
> Może napisać kawałek kodu w PHP:
> * pobrać URL
> * wywalić document.write('...') i zostanie sam HTML
> * wstawić w kod strony
Zacytuję swoje słowa z wątku otwierającego:
"Czy da się bez angażowania programowania po stronie serwera załadować i
wykonać ten skrypt asynchronicznie?" :-D
> Można tez dorobić cache, aby nie pobierać prognozy przy każdej odsłonie
> strony.
Cache w JS? W jaki sposób? Cookies do tego celu się nie nadają gdyż są
zbyt krótkie.
--
Pozdrawiam
Marek
Paweł Piskorz
unread,
May 9, 2013, 10:40:49 AM5/9/13
Delete
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
W dniu 2013-05-07 23:24, Marek pisze:
> Wstawiam na stronę WWW widget pogodowy:
>
> <div class="box">
> <script type="text/javascript"
> src="http://www.pogodynka.pl/widget/get/gdansk_gdansk/?a1=FFFFFF&a2=0088FF"></script>
>
> </div>
>
> Pięknie się wyświetla ale ma jeden feler: serwer jest bardzo wolny i
> blokuje ładowanie się strony (wykonywanie innych skryptów) czasem o
> kilkadziesiąt sekund. Czy da się bez angażowania programowania po
> stronie serwera załadować i wykonać ten skrypt asynchronicznie?
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
W dniu 2013-05-09 16:40, Paweł Piskorz pisze:
>
> Wrzuć go do iframe.
No tak, najprostsze rozwiązania najtrudniej dostrzec. :-D
Dzięki :-)
--
Pozdrawiam
Marek
Marek
unread,
May 9, 2013, 3:47:47 PM5/9/13
Delete
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
W dniu 2013-05-09 18:02, Marek pisze:
>> Wrzuć go do iframe.
>
> No tak, najprostsze rozwiązania najtrudniej dostrzec. :-D
> Dzięki :-)
Może wyjaśnienie dla pokoleń.
Nie należy wrzucać <iframe src="weather.html"> gdyż nic się nie zmieni.
Strona nadal będzie czekała na uruchomienie się skryptów w kodzie
weather.html. Należy w JS dynamicznie ustawić src jako ostatnią
instrukcję w kodzie inicjującym.