Geriausias būdas naudoti „Google“ „jQuery“ talpyklą, bet „Google“ sugenda

Koks būtų geriausias būdas įkelti „ Google“ (arba kitiems „Google“ valdomiems failams) talpinamą „jQuery“, bet įkelti mano „jQuery“ kopiją, jei „Google“ bandymas nepavyko?

Aš nesakau, kad „Google“ yra nulaužta. Yra atvejų, kai „Google“ kopija yra užblokuota (pavyzdžiui, Irane).

Ar nustatyčiau laikmatį ir patikrinčiau jQuery objektą?

Kokia būtų abiejų kopijų perdavimo pavojus?

Nerandykite atsakymų, pvz., „Tiesiog naudokitės„ Google “arba„ tiesiog naudokite savo “. Suprantu šiuos argumentus. Taip pat suprantu, kad vartotojas greičiausiai turės „Google“ talpyklos versiją. Aš galvoju apie atsargines kopijas debesiui kaip visumai.


Redaguoti: ši dalis pridėta ...

Kadangi „Google“ siūlo naudoti „google.load“, kad galėtumėte įkelti „ajax“ bibliotekas ir atšaukimus, kai tai daroma, man įdomu, ar tai yra raktas į šią problemą.

Žinau, kad tai skamba šiek tiek kvailai. Aš tiesiog bandau išsiaiškinti, ar tai galima padaryti patikimai, ar ne.


Atnaujinimas: „JQuery“ dabar yra „Microsoft CDN“.

http://www.asp.net/ajax/cdn/

986
18 июня '09 в 20:51 2009-06-18 20:51 „Nosredna“ yra nustatyta birželio 18 d., 09:51, 2009-06-18 20:51
ответ 21 atsakymas

Tai galite pasiekti taip:

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> <script> window.jQuery || document.write('<script src="/path/to/your/jquery"><\/script>'); </script> 

Tai turėtų būti jūsų <head> puslapyje, o bet kokie jQuery įvykių tvarkytojai turėtų būti <body> kad būtų išvengta klaidų (nors tai nėra tobula!).

Kita priežastis, kodėl „Google“ nepalaiko jQuery, yra ta, kad kai kuriose šalyse „Google“ domeno vardas yra draudžiamas.

776
18 июня '09 в 21:00 2009-06-18 21:00 atsakymą pateikė Rony birželio 18 d., 09:00 21:00 2009-06-18 21:00

Paprasčiausias ir švariausias būdas tai padaryti:

border=0
 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="path/to/your/jquery"><\/script>')</script> 
328
22 февр. BenjaminRH atsakymą pateikė vasario 22 d. 2012-02-22 21:05 '12, 9:05 val. 2012-02-22 21:05

Man atrodo, kad tai veikia:

 <html> <head> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> // has the google object loaded? if (window.google  window.google.load) { google.load("jquery", "1.3.2"); } else { document.write('<script type="text/javascript" src="http://joecrawford.com/jquery-1.3.2.min.js"><\/script>'); } window.onload = function() { $('#test').css({'border':'2px solid #f00'}); }; </script> </head> <body> <p id="test">hello jQuery</p> </body> </html> 

Tai, kaip jis veikia, yra naudoti „ google objektą, kuriame skambinama http://www.google.com/jsapi įkelti į window objektą. Jei šio objekto nėra, manome, kad prieiga prie „Google“ nepavyko. Jei taip, įkeliame vietinę kopiją, naudodami document.write . (Šiuo atveju naudoju savo serverį, naudokite jį bandymui).

Aš taip pat patikriname window.google.load - taip pat galėčiau atlikti tipo patikrinimą, kad pamatytumėte, ar objektai yra objektai ar funkcijos. Bet aš manau, kad tai triukas.

Tai tik įkėlimo logika, nes kodo paryškinimas atrodo nesėkmingas, nes paskelbiau visą išbandytą HTML puslapį:

 if (window.google  window.google.load) { google.load("jquery", "1.3.2"); } else { document.write('<script type="text/javascript" src="http://joecrawford.com/jquery-1.3.2.min.js"><\/script>'); } 

Nors turiu pasakyti, kad nesu įsitikinęs, kad jei jis trikdys jūsų svetainės lankytojus, turėtumėte žaisti su „ Google AJAX API“ API .

Puikus faktas . Iš pradžių aš bandžiau naudoti „try..catch“ bloką skirtingose ​​versijose, tačiau negalėjau rasti derinio, kuris būtų toks švarus kaip šis. Man būtų įdomu pamatyti kitas šios idėjos įgyvendinimą, tiesiog kaip pratimą.

73
22 июня '09 в 4:15 2009-06-22 04:15 atsakymas duodamas artlung birželio 22 d., 09:15, 2009-06-22 04:15

Jei svetainėje yra modernizr.js objektų, galite naudoti įmontuotą yepnope.js, kad asinchroniškai įkeltumėte savo scenarijus, be kita ko, jQuery (su atsargine kopija).

 Modernizr.load([{ load : '//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js' },{ test : window.jQuery, nope : 'path/to/local/jquery-1.7.2.min.js', both : ['myscript.js', 'another-script.js'], complete : function () { MyApp.init(); } }]); 

Jis įkelia „jQuery“ iš „google-cdn“. Po to patikrinama, ar jQuery buvo sėkmingai įkelta. Jei ne („nope“), vietinė versija įkeliama. Taip pat įkeliami jūsų asmeniniai scenarijai - „abu“ rodo, kad pakrovimo procesas inicijuojamas nepriklausomai nuo bandymo rezultatų.

Kai visi atsisiuntimo procesai baigti, funkcija „MyApp.init“ įvykdoma.

Aš asmeniškai norėčiau, kad šis būdas būtų įkelti asinchroninį scenarijų. Ir kadangi aš pasikliau modernaus funkcinius bandymus kuriant svetainę, aš vis dar ją įdėjau į svetainę. Taigi tikrai nėra pridėtinių.

30
26 июня '12 в 23:41 2012-06-26 23:41 atsakymą Emanuelis Kluge pateikė birželio 26 d. 12 d. 23:41 2012-06-26 23:41

Čia yra keletas puikių sprendimų, bet norėčiau dar vieną žingsnį į vietinį failą.

Tuo atveju, kai „Google“ neveikia, ji turėtų atsisiųsti vietinį šaltinį, bet galbūt fizinis failas serveryje ne visada yra geriausias variantas. Aš naudoju tai, nes šiuo metu įgyvendinu tą patį sprendimą, tiesiog noriu grįžti į vietinį failą, kurį generuoja duomenų šaltinis.

Mano priežastys yra tai, kad noriu turėti tam tikrų įgūdžių, kai reikia stebėti, ką atsisiunčiau iš „Google“ ir ką turiu vietiniame serveryje. Jei noriu pakeisti versijas, noriu, kad mano vietinė kopija būtų sinchronizuojama su tuo, ką bandau atsisiųsti iš „Google“. Aplinkoje, kurioje yra daug kūrėjų, manau, kad geriausias būdas yra automatizuoti šį procesą, kad viskas, ką jums reikia padaryti, yra pakeisti versijos numerį konfigūracijos faile.

Čia yra mano siūlomas sprendimas, kuris turėtų veikti teoriškai:

  • Programos konfigūracijos faile įrašau 3 dalykus: absoliutų bibliotekos URL, „JavaScript“ API URL ir versijos numerį
  • Parašykite klasę, kuri gauna pačios bibliotekos failo turinį (gauna URL iš taikomųjų programų konfigūracijos), saugo jį mano duomenų šaltinyje su pavadinimu ir versijos numeriu
  • Parašykite tvarkyklę, kuri ištraukia mano vietinį failą iš db ir saugo failą, kol pasikeis versijos numeris.
  • Jei jis pasikeis (mano paraiškos konfigūracijoje), mano klasė ištrauks failo turinį pagal versijos numerį, išsaugos ją kaip naują įrašą mano duomenų šaltinyje, tada tvarkytojas pradės įkelti ir prižiūrėti naują versiją.

Teoriškai, jei mano kodas parašytas teisingai, viskas, ką reikia padaryti, yra pakeisti versijos numerį savo paraiškos konfigūracijoje, o ne alt! Turite automatinį atsarginį sprendimą ir nereikia išlaikyti fizinių failų serveryje.

Ką visi galvoja? Tai gali būti per daug, bet tai gali būti elegantiškas būdas palaikyti AJAX bibliotekas.

Gilė

20
26 июня '09 в 20:02 2009-06-26 20:02 atsakymas pateiktas Acorn birželio 26 d., 09:02, 2009-06-26 20:02
 if (typeof jQuery == 'undefined') { // or if ( ! window.jQuery) // or if ( ! 'jQuery' in window) // or if ( ! window.hasOwnProperty('jQuery')) var script = document.createElement('script'); script.type = 'text/javascript'; script.src = '/libs/jquery.js'; var scriptHook = document.getElementsByTagName('script')[0]; scriptHook.parentNode.insertBefore(script, scriptHook); } 

Pabandę į „CDN“ įtraukti „Google“ kopiją.

HTML5 atveju nereikia nustatyti type atributo.

Taip pat galite naudoti ...

 window.jQuery || document.write('<script src="/libs/jquery.js"><\/script>'); 
20
28 янв. atsakymas duotas alex sausio 28 d 2011-01-28 08:49 '11 at 8:49 2011-01-28 08:49

Galima naudoti vietinę rinkmeną kaip paskutinę išeitį.

Atrodo, kad dabar jQuery savo CDN nepalaiko https. Jei taip, pirmiausia galite jį atsisiųsti.

Taigi, čia yra seka: Google CDN => Microsoft CDN => Jūsų vietinė kopija.

 <!-- load jQuery from Google CDN --> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <!-- fallback to Microsoft Ajax CDN --> <script> window.jQuery || document.write('<script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js">\x3C/script>')</script> <!-- fallback to local file --> <script> window.jQuery || document.write('<script src="Assets/jquery-1.8.3.min.js">\x3C/script>')</script> 
8
12 янв. atsakymą pateikė Edward Olamisan 12 sausis 2013-01-12 19:42 '13, 7:42 pm 2013-01-12 19:42

Būtinai atsisiųskite naujausią „jQuery“ versiją ir versiją:

 <!--[if lt IE 9]> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="/public/vendor/jquery-legacy/dist/jquery.min.js">\x3C/script>')</script> <![endif]--> <!--[if gte IE 9]><!--> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="/public/vendor/jquery/dist/jquery.min.js">\x3C/script>')</script> <!--<![endif]--> 
7
21 февр. Neikerio atsakymas, vasario 21 d 2014-02-21 19:09 '14, 19:09, 2014-02-21 19:09
  • 1 veiksmas: nepavyko įkelti jQuery? (patikrinkite „ jQuery kintamąjį)

Kaip patikrinti neapibrėžtą kintamąjį javascript

  • 2 veiksmas: dinaminio importo (atsarginės kopijos) javascript failas

Kaip įtraukti „JavaScript“ failą į kitą „JavaScript“ failą?

5
19 июня '11 в 9:41 2011-06-19 09:41 atsakymas pateikiamas ninjagecko birželio 19 d. 11 val. 9:41 2011-06-19 09:41

Dėl uždraudimo „Google“ problemos aš norėčiau naudoti „Microsoft“ cdn http://www.asp.net/ajaxlibrary/cdn.ashx

5
05 июня '11 в 12:02 2011-06-05 12:02 atsakymą įteikė Serdaras, birželio 5 d. 11 d., 12:02 2011-06-05 12:02

Čia yra puikus paaiškinimas!

Taip pat įgyvendina apkrovos vėlavimus ir laiko tarpus!

http://happyworm.com/blog/2010/01/28/a-simple-and-robust-cdn-failover-for-jquery-14-in-one-line/

4
07 июля '11 в 13:06 2011-07-07 13:06 atsakymą pateikė „ Stuart.Sklinar“ liepos 7 d. 11 d. 13:06 2011-07-07 13:06

Asmenims, naudojantiems ASP.NET MVC 5, pridėkite šį kodą į savo „BundleConfig.cs“, kad įjungtumėte CDN, skirtą „Jquery“

 bundles.UseCdn = true; Bundle jqueryBundle = new ScriptBundle("~/bundles/jquery", "//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js").Include("~/Scripts/jquery-{version}.js"); jqueryBundle.CdnFallbackExpression = "window.jQuery"; bundles.Add(jqueryBundle); 
4
20 окт. Atsakymą Muhammad Rehan Saeed pateikė spalio 20 d. 2014-10-20 12:36 '14, 12:36 2014-10-20 12:36

UPDATE:
Šis atsakymas buvo neteisingas. Prašome perskaityti šio paaiškinimo komentarus.


Atsakymai į daugumą jūsų buvo atsakyti, bet kaip ir paskutinėje dalyje:

Kokia būtų abiejų kopijų perdavimo pavojus?

Ne Jūs prarasite pralaidumą, galite pridėti keletą milisekundžių, įdėdami antrą nenaudingą kopiją, bet nesukelia jokios žalos, jei jie abu praeina. Jūs, žinoma, turėtumėte vengti to, naudodami pirmiau minėtus metodus.

4
26 июня '12 в 23:58 2012-06-26 23:58 Atsakymas duotas KodėlNutHugo birželio 26, 12 d. 23:58 2012-06-26 23:58

„Google“ surengė jQuery

  • Jei jums patinka senesnės naršyklės, ypač IE versijos prieš IE9, tai yra dažniausia jQuery versija
 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
  • Jei nerūpi oldie, tai mažesnė ir greitesnė:
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 

Rezervas / atsarginis planas!

  • Bet kokiu atveju turėtumėte naudoti vietinės kopijos atsarginę kopiją, jei „Google“ CDN nepavyksta (mažai tikėtina) arba yra užblokuota toje vietoje, kur jūsų vartotojai pasiekia jūsų svetainę (šiek tiek labiau tikėtina), pavyzdžiui, Iranas ar kartais Kinija.
 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script>if (!window.jQuery) { document.write('<script src="/path/to/your/jquery"><\/script>'); } </script> 

Nuoroda: http://websitespeedoptimizations.com/ContentDeliveryNetworkPost.aspx

2
24 янв. atsakymas pateikiamas Ryan Jan 24 2016-01-24 14:54 '16 at 14:54 pm 2016-01-24 14:54

Manau, kad reikėtų vengti paskutinio <x3C eilutės. Kai naršyklė mato, ji mano, kad tai yra scenarijaus bloko pabaiga (kadangi HTML analizatorius nesupranta apie „JavaScript“, jis negali atskirti kažko, kas tik pasirodo eilutėje, ir tai, ką scenarijų elementas iš tikrųjų reiškia). Taigi, pažodžiui „JavaScript“, kad HTML puslapio viduje (geriausiu atveju) atsiranda klaidų, ir (blogiausiu atveju) yra didžiulė saugumo skylė.

 <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.0.0.min.js"></script> <script>window.jQuery || document.write('<script src="js/jquery-2.0.0.min.js">\x3C/script>')</script> 
2
26 мая '13 в 7:44 2013-05-26 07:44 atsakymą pateikė JKhuang gegužės 13 d. 13 val. 2013-05-26 07:44
 if (typeof jQuery == 'undefined')) { ... 

Or

 if(!window.jQuery){ 

Jis neveiks, jei cdn versija nebus įkelta, nes naršyklė įvykdys šią sąlygą ir tuo metu, kai bus įkeliami visi kiti „JavaScript“ kodai, kuriems reikia „jQuery“, ir grąžina klaidą. Sprendimas buvo įkelti scenarijus per šią sąlygą.

  <script src="http://WRONGPATH.code.jquery.com/jquery-1.4.2.min.js" type="text/javascript"></script><!-- WRONGPATH for test--> <script type="text/javascript"> function loadCDN_or_local(){ if(!window.jQuery){//jQuery not loaded, take a local copy of jQuery and then my scripts var scripts=['local_copy_jquery.js','my_javascripts.js']; for(var i=0;i<scripts.length;i++){ scri=document.getElementsByTagName('head')[0].appendChild(document.createElement('script')); scri.type='text/javascript'; scri.src=scripts[i]; } } else{// jQuery loaded can load my scripts var s=document.getElementsByTagName('head')[0].appendChild(document.createElement('script')); s.type='text/javascript'; s.src='my_javascripts.js'; } } window.onload=function(){loadCDN_or_local();}; </script> 
2
26 февр. Mirek Komárek atsakymas, pateiktas vasario 26 d. 2011-02-26 17:19 '11, 17:19, 2011-02-26 17:19

Nors „ document.write("<script></script>") įrašas jQuery backoff atrodo lengviau, „Chrome“ šiuo atveju pateikia patvirtinimo klaidą. Todėl norėčiau nutraukti žodį „scenarijus“. Taigi jis tampa saugesnis, kaip aprašyta aukščiau.

 <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"></script> <script>if (typeof jQuery === "undefined") { window.jqFallback = true; document.write("<scr"+"ipt src='http://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js'></scr"+"ipt>"); } </script> 

Dėl ilgalaikių problemų geriau užregistruoti „jQuery“ atsargines kopijas. Minėtame kode, jei pirmasis CDN nėra, jQuery yra įkeltas iš kito CDN. Bet galbūt norėsite žinoti šį klaidingą CDN ir ištrinti jį amžinai. (šis atvejis yra labai išskirtinis atvejis). Taip pat geriau įrašyti atsargines problemas. Taigi, galite siųsti klaidų atvejus naudodami AJAX. Kadangi jQuery nėra apibrėžta, turite naudoti javascript, kad galėtumėte tvarkyti AJAX užklausą.

 <script type="text/javascript"> if (typeof jQuery === 'undefined' || window.jqFallback == true) { // XMLHttpRequest for IE7+, Firefox, Chrome, Opera, Safari // ActiveXObject for IE6, IE5 var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); var url = window.jqFallback == true ? "/yourUrl/" : "/yourUrl2/"; xmlhttp.open("POST", url, true); xmlhttp.send(); } </script> 
1
07 янв. Atsakymas pateikiamas per pirmąjį 07 sausį 2015-01-07 11:44 '15 at 11:44 2015-01-07 11:44

Nepavyko įkelti išteklių iš išorės duomenų saugyklos, esančios už jūsų kontrolės. Jei trūksta funkcijų, tai yra visiškai klaidinga priemonė, kaip išvengti laiko pertraukos, kaip aprašyta čia: http://www.tech-101.com/support/topic/4499-issues-using-a-cdn/

1
26 июня '15 в 19:27 2015-06-26 19:27 atsakymą pateikė „ Jobeard “ birželio 26 d., 15 val., 19:27, 2015-06-26 19:27

Naudojant „Razor“ sintaksę ASP.NET, šis kodas suteikia atsarginę paramą ir veikia su virtualia šaknimi:

 @{var jQueryPath = Url.Content("~/Scripts/jquery-1.7.1.min.js");} <script type="text/javascript"> if (typeof jQuery == 'undefined') document.write(unescape("%3Cscript src='@jQueryPath' type='text/javascript'%3E%3C/script%3E")); </script> 

Arba sukurkite pagalbininką ( pagalbinę peržiūrą ):

 @helper CdnScript(string script, string cdnPath, string test) { @Html.Raw("<script src=\"http://ajax.aspnetcdn.com/" + cdnPath + "/" + script + "\" type=\"text/javascript\"></script>" + "<script type=\"text/javascript\">" + test + " || document.write(unescape(\"%3Cscript src='" + Url.Content("~/Scripts/" + script) + "' type='text/javascript'%3E%3C/script%3E\"));</script>") } 

ir naudokite jį taip:

 @CdnScript("jquery-1.7.1.min.js", "ajax/jQuery", "window.jQuery") @CdnScript("jquery.validate.min.js", "ajax/jquery.validate/1.9", "jQuery.fn.validate") 
1
23 янв. atsakymas, kurį pateikė Edward Brey 2012-01-23 00:50 '12 - 0:50 2012-01-23 00:50

Aš sukūriau „Gist“, kuris turėtų dinamiškai įkelti „jQuery“, jei jis dar nėra įkeltas, ir jei šaltinis neveikia, jis persijungia į atsargines kopijas (susiuvusias iš daugelio atsakymų):

Atkreipkite dėmesį, kad planuoju atnaujinti „Gist“, bet ne šį atsakymą, už ką tai kainuoja!

  function cascadeJQLoad(i) { // Use alternate CDNs where appropriate to load jQuery if (typeof(i) != "number") i = 0; // the actual paths to your jQuery CDNs var jq_paths = [ "ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js", "ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.0.min.js" ]; // Paths to your libraries that require jQuery var dependent_libraries = [ "js/c.js" ]; if (window.jQuery === undefined  i < jq_paths.length) { i++; loadJQ(jq_paths[i], i, dependent_libraries); } if (window.jQuery === undefined  i == jq_paths.length) { // jQuery failed to load // Insert your handler here } }  function loadJQ(jq_path, i, libs) { //load jQuery if it isn't already if (typeof(jq_path) == "undefined") return false; if (typeof(i) != "number") i = 1; var loadNextJQ = function() { var src = 'https:' == location.protocol ? 'https' : 'http'; var script_url = src + '://' + jq_path; loadJS(script_url, function() { if (window.jQuery === undefined) cascadeJQLoad(i); }); } window.onload = function() { if (window.jQuery === undefined) loadNextJQ(); else { // Load libraries that rely on jQuery if (typeof(libs) == "object") { $.each(libs, function() { loadJS(this.toString()); }); } } } if (i > 0) loadNextJQ(); } function loadJS(src, callback) { var s = document.createElement('script'); s.src = src; s.async = true; s.onreadystatechange = s.onload = function() { var state = s.readyState; try { if (!callback.done  (!state || /loaded|complete/.test(state))) { callback.done = true; callback(); } } catch (e) { // do nothing, no callback function passed } }; s.onerror = function() { try { if (!callback.done) { callback.done = true; callback(); } } catch (e) { // do nothing, no callback function passed } } document.getElementsByTagName('head')[0].appendChild(s); }  if (window.readyState) { //older microsoft browsers window.onreadystatechange = function() { if (this.readyState == 'complete' || this.readyState == 'loaded') { cascadeJQLoad(); } } } else { //modern browsers cascadeJQLoad(); } 
1
20 марта '14 в 23:45 2014-03-20 23:45 atsakymą pateikė Philipas Kahnas kovo 14 d., 14 val. 11:45 2014-03-20 23:45

Kitas rezervas, pakeisiantis ajax.googleapis.com su cdnjs.cloudflare.com :

 (function (doc, $) { 'use strict'; if (typeof $ === 'undefined') { var script = doc.querySelector('script[src*="jquery.min.js"]'), src = script.src.replace('ajax.googleapis.com', 'cdnjs.cloudflare.com'); script.parentNode.removeChild(script); doc.write('<script src="' + src + '"></script>'); } })(document, window.jQuery || window.Zepto); 
  • Jums nereikia nerimauti dėl jQuery versijos
  • Idealiai tinka turto valdymui, kuris neveikia su HTML komentarais
  • Išbandyta gamtoje - puikiai tinka vartotojams iš Kinijos.
-2
07 окт. atsakymas pateikiamas redaxmedia 07 okt. 2015-10-07 14:28 '15, 14:28, 2015-10-07 14:28

Kiti klausimai apie „ arba klausimo pateikimas