Akutní selhání ledvin může pacienta nepříjemně zaskočit. Co ho způsobuje?

30. 8. 2021 7:30
přidejte názor
Autor: Depositphotos

Pokud ledviny náhle přestanou plnit svou funkci, je nutné situaci okamžitě řešit. V těle pacienta se totiž vlivem akutního renálního selhání hromadí odpadní látky, které mohou poškodit ostatní orgány a ohrozit člověka na životě. Mezi typické projevy patří vznik otoků nebo snížená tvorba moči. Důležité je pak hlavně rychlé odhalení příčiny obtíží a zahájení vhodné léčby, aby se předešlo dalším komplikacím.

Co je renální selhání?

Co se dozvíte v článku
  1. Co je renální selhání?
  2. Akutní selhání ledvin
  3. Jaké má akutní selhání ledvin příčiny?
  4. Jaké má akutní selhání ledvin příznaky?
  5. Možné komplikace
  6. Diagnostika
  7. Léčba akutního selhání ledvin

Jako selhání ledvin nebo také renální selhání se označuje stav, kdy ledviny ztrácejí svou schopnost vylučovat z těla odpadní látky (produkty dusíkatého metabolismu), které se zde hromadí. Ty pak toxicky působí na ostatní orgány v těle a způsobují rozvoj nepříjemných zdravotních komplikací. Kromě toho ledviny nezvládají udržovat rovnováhu vody a elektrolytů ani acidobazickou rovnováhu.

Akutní selhání ledvin

Lékaři v dnešní době rozlišují dva různé druhy renálního selhání. Pokud k němu dojde u pacienta, jehož ledviny doposud fungovaly naprosto normálně, hovoříme o akutním selhání ledvin (v rozsahu pouhých několika hodin či dnů). Rozvine-li se však jako důsledek chronického onemocnění ledvin, kvůli kterému u pacienta docházelo k postupnému poklesu renálních funkcí, jedná se o chronické selhání ledvin.

Jak předejít problémům s ledvinami? Poslechněte si podcast s nefroložkou:

Jako akutní selhání ledvin (ASL či AKI neboli acute kidney injury) se tedy označuje nečekané, prudké a potenciálně reverzibilní zhoršení funkce ledvin. Ty nejsou schopné z organismu vylučovat zplodiny metabolismu, což vede k rozvoji hyperazotemie, která se projevuje kumulací neproteinových dusíkatých látek a sníženou glomerulární filtrací.

Pokud konečný produkt metabolismu bílkovin, kterým je močovina, zůstává v organismu a jeho koncentrace překročí hraniční hodnoty, dochází k poruše vnitřního prostředí. To bývá často spojeno také s uremickým syndromem, způsobuje ztrátu vědomí a celkové zhroucení metabolismu a v nejhorším případě může pacienta ohrozit na životě.

Jaké má akutní selhání ledvin příčiny?

K akutnímu renálnímu selhání může dojít z celé řady různých důvodů. Příčiny těchto zdravotních komplikací přitom mohou být prerenální (oběhové, vlivem poruchy cirkulace), renální (parenchymové, z důvodu patologie ledvinové tkáně) nebo postrenální (obstrukce močových cest).

Prerenální selhání

V rámci prerenálního akutního selhání ledvin se reverzibilně snižuje glomerulární filtrace (GF), což je důsledek hypoperfuze ledvin (snížené prokrvení tkáně). Problém zde tedy není v samotných ledvinách, ale v porušení přísunu krve, kyslíku a důležitých živin, což způsobuje renální poškození. Nutriční oběh však porušený nebývá, a jakmile dojde k úpravě průtoku, stav se rychle vrací do normálu.

Mezi nejčastější vyvolávající příčiny patří dehydratace. Ta je obzvláště u starších pacientů poměrně častá a její efekt na ledviny může být v některých případech až devastující. U dehydratovaného člověka totiž krevními cévami neproudí dostatek tekutin, zhoršuje se průtok krve ledvinami a buňky ledvinových kanálků následně odumírají. Další možné příčiny jsou:

  • deplece intravaskulárního oběhu – větší ztráta krve, ztráty gastrointestinálním traktem, močí nebo pocením, dehydratace,
  • snížený srdeční výdej – kardiogenní šok, městnavé srdeční selhání, perikarditida, plicní embolie,
  • systémová vazokonstrikce – hepatorenální syndrom, anestézie, vysoké dávky dopaminu,
  • systémová vazodilatace – anafylaktický šok, sepse, hypotenziva (léky snižující krevní tlak), vedlejší účinek užívání některých léků,
  • hyperviskózní syndrom – myelom, makroglobulinemie.

K prerenálním příčinám lékaři rovněž řadí postižení renální arterie, tedy stenózu (ateroskleróza, fibromuskulární dysplazie) či embolii renální tepny. K možným důvodům rozvoje prerenálního selhání patří také operační výkony spojené s větší krevní ztrátou a následnou hypovolémií nebo septické komplikace urologického intervenčního výkonu. Prerenální selhání přitom představuje asi 20 % všech ASL.

Vlastní renální selhání

Mnohem častěji (dohromady až v 70 % případů) je příčinou komplikací vlastní ledvinové selhání, v jehož rozvoji hraje důležitou roli účast prerenálních faktorů. Renální příčiny přitom zahrnují celou řadu onemocnění, která postihují různé anatomické části ledvin. Sem patří například poškození tubulů, ledvinného intersticia, glomerulů a parenchymových cévních struktur.

Téměř 60 % všech případů ASL má na svědomí akutní tubulární nekróza, která je také nejčastější příčinou zhoršení funkce ledvin u lidí s preexistující nefropatií. Tubulární aparát přitom bývá postižen hlavně z toho důvodu, že je velmi citlivý na ischemické vlivy. Poškození tubulů je pak následkem hypoperfúze ledvin (například šokové stavy), což se projevuje:

  • poklesem průtoku krve,
  • snížením permeability kapilární stěny,
  • refluxem filtrátu poškozeným tubulem do intersticia,
  • následným ucpáním tubulů.

Další ischémie postupně snižuje tvorbu vazodilatačních působků a vede k tvorbě těch vazokonstrikčních. Proto dochází k prohloubení ischémie a rozvíjí se nekróza tubulárních buněk. Později se také zvyšuje tubulární tlak a důsledkem je zástava glomerulární filtrace. Časté je ovšem i poškození endogenními či exogenními toxiny. Sem patří například:

  • antibiotika – aminoglykosidy, sulfonamidy, tetracykliny, amfotericin B,
  • chemoterapeutika – metotrexát, cisplatina, mitomycin,
  • imunosupresiva – cyklosporin,
  • organická rozpouštědla – etylenglykol,
  • těžké kovy – rtuť, olovo a další,
  • radiokontrastní látky,
  • intratubulární precipitace hemoglobinu či myoglobinu – rhabdomyolýzy, crush syndrom, infekce, ketoacidóza, ischemické poškození svalů.

Postižení ledvinného intersticia není v izolované formě příliš časté, ale může také doprovázet výše zmíněné postižení tubulárního aparátu. Na vině přitom bývá třeba akutní infekční intersticiální nefritida (bakteriální infekce), autoimunitní onemocnění (systémový lupus erythematodes), infiltrativní onemocnění (lymfom, sarkoidóza) či užívání některých léků.

Co se týče poškození glomerulů a parenchymových cév s následným rozvojem akutního ledvinového selhání, to v minulosti souviselo především s dnes již poměrně vzácnou akutní glomerulonefritidou (poststreptokokovou). Momentálně představuje větší riziko některá z forem rychle progredujících glomerulonefritid. K primárně cévnímu parenchymovému poškození pak dochází na základě hypertenzní krize, vlivem polyartritis nodosa, ale také při ostatních vaskulitidách.

Postrenální selhání (postobstrukční renální selhání)

V tomto případě se patologické změny nacházejí až za ledvinami v močových cestách. Postrenální selhání, které představuje asi 10 % všech ASL, tedy vzniká působením chorob, jejichž projevy mají na svědomí obstrukci močového systému od úrovně tubulů až po močovou trubici. Mezi konkrétní příčiny postrenálního selhání patří například:

  • oboustranná obstrukce horních močových cest – tvorba močových kamenů, útlak nebo poranění močovodů, gynekologické tumory, tumorózní infiltrace trojúhelníkovitého pole močového měchýře,
  • obstrukce hrdla močového měchýře – benigní hyperplazie prostaty, karcinom prostaty,
  • tamponáda močového měchýře krevním koagulem,
  • hematom retroperitonea (štěrbinový prostor za peritoneální dutinou).

Iatrogenní poškození

U pacientů s rozvinutým renálním onemocněním poměrně často dochází k iatrogennímu poškození, což znamená, že je vyvolané lékařem (například špatným vyšetřením, chybným léčením či neuváženým jednáním). Je proto nutné k nim přistupovat s vědomím, že prostřednictvím aplikace aminoglykosidů, nesteroidních antiflogistik nebo třeba diuretik je možné vyvolat ASL. Mezi rizikové skupiny osob se v tomto případě řadí například:

  • starší pacienti,
  • diabetici,
  • dehydratovaní pacienti,
  • lidé s městnavou srdeční slabostí,
  • lidé se stenózou renální arterie,
  • lidé trpící žloutenkou,
  • hypertonici s vaskulární nefrosklerózou,
  • pacienti po kardiovaskulárních výkonech.

Jaké má akutní selhání ledvin příznaky?

Pacienty většinou zajímá hlavně to, jak poznat selhání ledvin a co dělat, pokud opravdu pojmou podezření, že došlo k rozvoji těchto zdravotních komplikací. Projevy selhání ledvin jsou velice rozmanité a zasahují do celé řady oblastí. ASL přitom probíhá v několika fázích, které se označují jako iniciální, oligurické, polyurické a reparační stádium.

Mezi základní příznaky náhlého poškození ledvin a odumření buněk ledvinné tkáně se řadí snížená tvorba moči nebo dokonce úplná zástava močení. Kvůli hromadění tekutin a odpadních látek v organismu je pacient ohrožen rozvratem vnitřního prostředí, lékaři pozorují hyperkalémii (zvýšená hladina draslíku) a patrná je také vyšší hladina dusíkatých zplodin metabolismu.

Dále pak dochází také ke hromadění kyselých metabolických produktů a rozvíjí se metabolická acidóza neboli překyselení organismu. Pacienti mohou zaznamenat různé zdravotní komplikace, jako je například tvorba otoků obličeje či horních a dolních končetin, nevolnost a nutkání ke zvracení nebo také nesnesitelná bolest hlavy.

Příznaky akutního selhání ledvin:

Příznaky selhání ledvin se pak mohou lišit také v závislosti na tom, zda má tento zdravotní problém prerenální, renální, nebo postrenální příčiny. V prvním případě lékaři pozorují hlavně symptomy hypovolémie (snížení objemu probíhající krve). Sem patří například žízeň, nižší množství moči, závratě, suchá kůže nebo ortostatická hypotenze.

Mezi další příznaky, které mohou napovědět, že u pacienta došlo k prerenálnímu selhání, patří oligurie, anurie, pokles tělesné hmotnosti, diskrepance ve vzestupu urey a kreatininu či zvýšená osmolalita a hustota moči. U pacientů s pokročilým srdečním selháním, které způsobuje pokles renální perfuze, se pak objevuje také ortopnoe a paroxysmální noční dušnost.

Pokud jde o vlastní renální selhání, zde je opět patrná oligurie či anurie, dále pak lékaři zaznamenávají hyperhydrataci, iontovou dysbalanci nebo acidózu. Typický je také uremický syndrom, jenž vzniká vlivem hromadění dusíkatých látek v organismu a může mít gastrointestinální, respirační, nervové, kožní i kardiální projevy. Zatímco prerenální ASL se může upravit ihned, vlastní renální selhání trvá i po obnově perfuze ledvin.

V rámci postrenálního akutního selhání ledvin pak mohou pacienti zaznamenat celou řadu komplikací, které zahrnují třeba bolesti beder, bolesti distendovaného močového měchýře nad symfýzou (pevné spojení dvou kostí oddělených vazivovou chrupavkou) nebo ledvinovou koliku. Typická je také anurie a močová retence.

Postihlo vás akutní selhání ledvin?

Možné komplikace

Pokud není včas zahájena vhodná léčba, dochází k rozvoji závažných zdravotních obtíží, které mohou pacienta dokonce ohrozit na životě. Celkový rozvrat vnitřního prostředí se projevuje například poruchami vědomí a poruchami srdečního rytmu. Mezi typické komplikace spojené s akutním selháním ledvin se řadí:

  • abnormality ve vodním a elektrolytovém hospodářství,
  • kardiovaskulární problémy – srdeční selhání, infarkt myokardu, srdeční arytmie, zástava srdce, perikarditida,
  • postižení plic – plicní edém, pleuritida (zánět pohrudnice), krvácení do plic, ARDS (syndrom akutní dechové tísně),
  • gastrointestinální obtíže – zvracení, průjem, krvácení do gastrointestinálního traktu, hyperamylazémie (zvýšené hodnoty amylázy),
  • infekce – pneumonie, infekce močových cest,
  • neurologické a psychické komplikace – letargie, obrácený spánkový režim, stav zvýšené ospalosti, narušení kognitivních schopností.

Pokud člověk přežije celkový rozvrat vnitřního prostředí (obvykle díky dialýze), buňky ledvin se postupně obnoví a ledviny znovu začnou filtrovat krev. Nově vytvořené buňky ledvinných kanálků ovšem nejsou schopné moč koncentrovat a zabránit tak větším ztrátám vody. Taková fáze se označuje jako polyurická, trvá týdny nebo dokonce měsíce a jsou pro ni typické velké ztráty tekutin a iontů do moči.

Diagnostika

Pokud vznikne podezření na akutní renální selhání, je nutné provést celkové vyšetření ledvin a moči. Tyto testy odhalí stupeň závažnosti ASL a pomohou lékařům zjistit, co dané zdravotní komplikace způsobilo. Také mohou pomoci zabránit nechtěnému iatrogennímu poškození. Lékaři se přitom zaměřují hlavně na:

  • vyšetření plazmatické koncentrace urey,
  • vyšetření plazmatická koncentrace kreatininu,
  • kompletní krevní obraz a koagulační parametry,
  • biochemické vyšetření krve,
  • výdej moči (změny v množství),
  • mikroskopický rozbor moči,
  • biochemické vyšetření moči,
  • výpočet frakční exkrece sodíku (Fe Na),
  • zobrazovací metody – ultrasonografické vyšetření ledvin a vývodných cest včetně vyšetření prostaty, CT vyšetření, magnetická rezonance, vylučovací urografie, antegrádní pyelografie, cystouretrografie,
  • bioptické vyšetření – biopsie ledviny (v případě ASL nejasné etiologie),
  • elektrokardiografii.

Vzhledem k tomu, jak široké může být spektrum postižení renálních funkcí, bylo nutné zavést také nějakou standardizovanou definici selhání ledvin. Dříve se totiž tímto termínem označovaly stavy s mírně zvýšenými hodnotami sérového kreatininu a sníženými hodnotami glomerulární filtrace, ale také situace, které v rámci léčby vyžadují použití metod náhrady funkce ledvin.

Z toho důvodu lékaři roku 2004 přišli s klasifikací RIFLE, která měla odstranit do té doby přítomnou klasifikační nejednotnost, jež panovala v hodnocení závažnosti ASL. Ta klasifikuje stupeň akutního renálního selhání na základě odchylky sérového kreatininu, glomerulární filtrace (GF) a množství vylučované moči. Kritéria vypadají následovně:

  • Risk ® – zvýšení sérového kreatininu na 1,5násobek původní hodnoty, pokles glomerulární filtrace o 25 % nebo diuréza menší než 0,5 ml/kg/h po dobu 6 hodin,
  • Injury (I) – zvýšení sérového kreatininu na dvojnásobek původní hodnoty, pokles glomerulární filtrace o 50 % či diuréza menší než 0,5 ml/kg/h po dobu 12 hodin,
  • Failure (F) – zvýšení sérového kreatininu na trojnásobek původní hodnoty, pokles glomerulární filtrace o 75 %, sérový kreatinin vyšší než 4 mg/dl, diuréza menší než 0,3 ml/kg/h po dobu 24 hodin či anurie po dobu 12 hodin,
  • Loss (L) – perzistující akutní renální selhání, kompletní ztráta renálních funkcí na dobu delší než 4 týdny,
  • End-stage kidney disease (E) – selhání funkce ledvin po dobu delší než 3 měsíce.

Široké spektrum symptomů následně vedlo lékaře k tomu, že termín akutní renální selhání začali nahrazovat názvem akutní poškození ledvin (AKI neboli acute kidney injury). Ten je definován jako náhle vzniklý pokles ledvinných funkcí (během 48 hodin), který je spojený s absolutním vzestupem sérového kreatininu o více než 25 μmol/l, s nejméně 1,5násobným vzestupem sérového kreatininu oproti původní hodnotě nebo se snížením diurézy pod 0,5 ml/kg/h po dobu delší než 6 hodin.

Léčba akutního selhání ledvin

Způsob léčby při selhání ledvin se v tomto případě samozřejmě odvíjí od vyvolávající příčiny. Terapie je založena na jejím rychlém zvládnutí a odstranění, přičemž v úvodní fázi obvykle probíhá na jednotce intenzivní péče. Měla by být navíc zahájena ještě před pevným stanovením diagnózy ASL, aby se předešlo rozvoji závažnějších zdravotních komplikací.

Doporučená obecná opatření:

  • zajištění všech vitálních funkcí,
  • zajištění optimální hydratace pacienta,
  • odhalení a odstranění vyvolávající příčiny obtíží,
  • zahájení léčby primárního onemocnění (hlavně u renálních forem),
  • úprava narušeného iontového hospodářství, navrácení acidobazické rovnováhy,
  • prevence jakéhokoliv iatrogenního poškození ledvinové tkáně,
  • monitorace centrálního žilního tlaku,
  • zajištění dostatečného množství živin,
  • substituce stopových prvků a vitamínů (při dlouhodobé parenterální výživě),
  • zavedení močového katetru,
  • léčba doprovodných komplikací.

V rámci léčby základního onemocnění, které způsobilo akutní selhání ledvin, se využívá například optimální šoková terapie (zajištění dostatečného prokrvení a okysličení ledvin) a lékaři se soustředí také na vysazení nefrotoxických léčiv. Dále je nutné řešit hypokalémii
(suplementací draslíku) či hyperkalémii (akutní hemodialýzou nebo jinými způsoby).

U prerenálního selhání je možné situaci v některých případech zvládnout dostatečným zavodněním organismu, a to nejlépe za pomoci infuzí. Dané zavodnění obnoví průtok krve ledvinami, může zachránit jejich buňky a ideálně také navrátí funkci ledvin opět do normálního stavu. Dále pak může být nutná i terapie vyvolávajícího onemocnění.

V případě postrenálního selhání je většinou nutný okamžitý urologický zákrok. Překážka, která brání normálnímu odtoku moči, se musí co nejrychleji odstranit. Není-li to možné provést ihned, lékaři mohou nad překážkou močový trakt narušit a zajistit odtok moči jinou cestou (například močový katetr, stent, perkutánní epicystostomie, nefrostomie).

Podpůrná terapie

Pokud jde o podpůrnou terapii, dříve se podával manitol, ale v dnešní době již lékaři tuto možnost nedoporučují. V terapii oligurické formy akutního ledvinového selhání jsou naopak široce využívána kličková diuretika, jako je například furosemid. Díky nim je možné zvýšit diurézu, ale nejsou schopná vyřešit pokles glomerulární filtrace.

U pacientů, které trápí akutní renální selhání a chronické srdeční selhávání, se někdy podává dopamin, což je účinný vazodilatátor, který zvyšuje průtok krve ledvinami. Další možností je aplikace noradrenalinu, který je méně arytmogenní, z hlediska hemodynamické podpory účinnější a zásadně přispívá k obnově glomerulární filtrace.

Specifická terapie

Tento způsob léčby při selhání ledvin se odvíjí od toho, jakou příčinu obtíží lékaři prostřednictvím vyšetřovacích metod odhalili. Zhruba 20–60 % případů vyžaduje během hospitalizační fáze náhradu funkce ledvin (RRT neboli renal replacement therapy) v podobě akutní dialýzy. Využívají se přitom hlavně tyto metody:

  • intermitentní hemodialýza,
  • peritoneální dialýza,
  • kontinuální venovenózní hemofiltrace.

Pokud se ledviny nepodaří zachránit ani tímto způsobem, na řadu přichází transplantace ledvin. Jestliže vznikne podezření na akutní selhání ledvin, které se rozvíjí z důvodu rychle progredující glomerulonefritidy či vaskulitidy, další diagnostika a terapie se provádí na specializovaných nefrologických lůžkových pracovištích. To samé pak platí také pro nejasné nebo torpidní formy akutního renálního selhání.

Zdroje: solen.cz, internimedicina.cz, urologiepropraxi.cz, wikiskripta.eu

  • Žádné názory
  • Našli jste v článku chybu?
'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »