Léčba hemoroidů může být konzervativní i chirurgická. Záleží na formě a stupni obtíží

29. 11. 2021 7:30
přidejte názor
Autor: Shutterstock

Pokud vás trápí nesnesitelné svědění v oblasti konečníku, krvácení nebo potíže s vyprazdňováním, na vině jsou s největší pravděpodobností hemoroidy. Ačkoliv se lidé za tento problém často stydí, nejlepším řešením je okamžitě vyhledat lékaře, který poradí, jak léčit hemoroidy co nejúčinněji. Pomoci mohou lokální přípravky a medikamenty, ale i různé zákroky.

Co jsou hemoroidy?

Co se dozvíte v článku
  1. Co jsou hemoroidy?
  2. Příčiny a druhy hemoroidů
  3. Hemoroidy v těhotenství
  4. Jak se zbavit hemoroidů?
  5. Konzervativní léčba hemoroidů
  6. Semiinvazivní léčba hemoroidů
  7. Chirurgická léčba hemoroidů
  8. Léčba vnějších hemoroidů

Pod názvem hemoroidy (lidově hemeroidy) se ukrývají cévní pletence v oblasti konečníku a řitního otvoru, kterým se někdy říká také řitní žilní městky nebo jednoduše zlatá žíla. Jde o běžnou fyziologickou součást lidského těla, která se funkčně podílí na kontinenci, napomáhá s vyprazdňováním a chrání svaly řitního svěrače při průchodu stolice.

Když někdo zmíní hemoroidy, většina lidí si však představí zdravotní komplikace v análně-rektální oblasti, které pacientům způsobují řadu zdravotních obtíží. V tomto případě ale na vině často bývají různé záněty nebo praskliny, které jsou sice nepříjemné, ale s cévními pletenci nemají ve skutečnosti nic společného.

O hemoroidech se většinou hovoří až ve chvíli, kdy dojde k rozvoji charakteristických symptomů, kam se řadí třeba rozšíření a zduření cévních pletenců, svědění či krvácení. Jelikož ale hemoroidy představují běžnou součást lidského těla, je z lékařského pohledu nesprávné používat tento název pro patologické struktury. Lékaři proto raději volí označení hemoroidální onemocnění.

Příčiny a druhy hemoroidů

Protože jsou hemoroidy vysoce namáhané a citlivé, i mírné podráždění může způsobit patologické rozšíření, zduření a tvorbu bolestivých uzlíků. Za rozvoj obtíží může být zodpovědný třeba dlouhodobý nárůst žilního tlaku, zvýšený tonus svěračů nebo zvýšený nitrobřišní tlak. Kromě toho svou roli hraje i celá řada dalších faktorů, kam patří:

  • chronická zácpa či průjmy,
  • chronický kašel,
  • dysfunkce pánevního dna,
  • hormonální změny v těhotenství,
  • tlak plodu na břišní stěnu,
  • genetické predispozice,
  • životní styl pacienta (špatné stravování, nedostatek pohybu),
  • špatné defekační návyky, nedostatečná hygiena,
  • alkoholismus, kouření, stres či emocionální zátěž.

V závislosti na anatomii hemoroidů lékaři rozlišují dva hlavní druhy těchto žilních pletenců. Prvním z nich jsou vnitřní hemoroidy (interní hemoroidy), které se nachází ve vnitřním ústí řitního kanálu nad mukokutánní hranicí. Způsobují bezbolestné krvácení z konečníku, přičemž krev mívá jasně červenou barvu. Později dochází k prolapsu, což je vyhřeznutí sliznice skrze řitní otvor. Vyhřezlé hemoroidy pak mají na svědomí tlak v konečníku, pocit cizího tělesa, svědění, hlenový výtok nebo špinění stolicí.

Druhou variantou jsou vnější hemoroidy (zevní hemoroidy, externí hemoroidy), které vznikají ve spodní části análního kanálu a objevují se hlavně na zevním povrchu konečníku. Jde o měkké kožní výčnělky, které jsou nebolestivé a nekrvácí. Mohou ale trvale dráždit a zvlhčovat okolí, způsobují napětí a někdy přechází v akutní trombózu se zánětem. Trombotizovaný hemoroid je bolestivý perianální uzel modrofialové barvy doprovázený bolestí, zarudnutím a zduřením.

Hemoroidy v těhotenství

Hemoroidy se mohou objevit jak v průběhu těhotenství, tak i po porodu. Důvodem vzniku těchto patologických útvarů během gravidity bývá především zvýšené množství krve v těle nastávající matky. Působením zvětšující se dělohy na konečník a velké žíly v oblasti pánve se však její tok zpomaluje, což způsobí rozšíření drobných žil v okolí konečníku. Za rozvoj hemoroidů ale může být zodpovědný také porod, při němž dochází k aktivnímu tlačení a zvyšování nitrobřišního tlaku i tlaku na konečník.

Jak se zbavit hemoroidů?

Jelikož jsou tyto zdravotní komplikace velice nepříjemné, lidé se často ptají, jaká existuje pro hemoroidy léčba, co na hemoroidy pomáhá a jak se problémů co nejrychleji zbavit. Důležitá je v tomto případě hlavně včasná diagnostika. Lékař se zaměří na pacientovu anamnézu a provede fyzikální prohlídku. Pacient by pak měl podstoupit anoskopii a další vyšetření, které pomůže odlišit hemoroidy od jiných obtíží v análně-rektální oblasti.

Léčba se pak odvíjí od toho, jaké mají hemoroidy příznaky, o jaký typ hemoroidálního onemocnění se jedná (vnitřní x vnější x intermediární) a v jaké fázi se patologické změny v současné době nachází. K dispozici je řada různých terapeutických metod, které zahrnují konzervativní, semiinvazivní a chirurgickou léčbu. Nejčastěji se doporučuje zkombinovat farmakoterapii, užívání lokálních přípravků a dodržování režimových opatření.

Cílem zvolené léčby je odstranit veškeré příznaky hemoroidálního onemocnění. V žádném případě by ale nemělo dojít k úplné eliminaci hemoroidů, které hrají důležitou roli při udržování kontinence, a proto se léčí pouze symptomatické hemoroidální choroby. Léčba zároveň nesmí zhoršit spontánní prognózu obtíží. Z toho důvodu se vždy nejprve zvažují konzervativní metody a instrumentální zákroky. Chirurgické řešení obvykle přichází na řadu až jako poslední možnost.

Potýkáte se s hemoroidy?

Konzervativní léčba hemoroidů

Nejjednodušším způsobem, jak na hemoroidy vyzrát, je změna životních návyků. Lékaři doporučují především úpravu životosprávy, přičemž základem by měla být nedráždivá strava při hemoroidech s omezením pikantních jídel, alkoholu a kávy. Důležitá je naopak konzumace pokrmů s vysokým obsahem vlákniny a dodržování pitného režimu, což pomáhá předcházet zácpě.

Dalším faktorem, který zde hraje svou roli, je pravidelný pohyb, a to například ve formě procházek. Ten by neměli zanedbávat hlavně lidé, kteří mají sedavé zaměstnání, a osoby, které velkou část dne stráví u počítače nebo na gauči, takže se většinu času příliš nepohybují. Zároveň se vyplatí eliminovat kouření, nadměrnou fyzickou zátěž a stres.

Kromě toho by pacienti měli věnovat zvýšenou pozornost anální hygieně a zaměřit se na pravidelnost i konzistenci stolice. Důležité je omývat anus po každém vyprázdnění teplou vodou a nedráždivým mýdlem (například dětským) nebo speciálními pH neutrálními přípravky, které jsou určené pro intimní hygienu. Nevhodná jsou naopak agresivní parfémovaná mýdla.

Aplikace lokálních přípravků

Mezi konzervativní metody, jak se léčí hemoroidy, patří také různé lokální přípravky, které obsahují protizánětlivě působící látky. Jde především o nesteroidní analgetika-antiflogistika, která se často kombinují s venotoniky, lokálními anestetiky či hemostyptiky. Navíc mají i lubrikační účinek, což znamená, že pacientům usnadňují vyprazdňování. Co pomáhá na hemoroidy?

  • účinná mast na hemoroidy,
  • krém na hemoroidy,
  • gel na hemoroidy,
  • čípky na hemoroidy.

Mezi nejpoužívanější přípravky na hemoroidy se dnes řadí především Dobexil, Faktu, Hemor-rite, Hemostop, Mastu, Procto-Glyvenol nebo Spofax. Ačkoliv jednotlivá léčiva pochází od různých výrobců, často jde o kombinaci stejných účinných látek, jako je například kalcium dobesilát, cinchokain-hydrochlorid, lidokain-hydrochlorid, tuk žraločích jater nebo extrakt živých kvasinek.

Pro zvládnutí akutních obtíží je možné krátkodobě užívat také další medikamenty, jako jsou například antihemoroidalia, která obsahují kortikosteroidy. Sem patří například Doxiproct nebo Ultraproct. Pokud jde o systémovou léčbu, podávají se hlavně venotonika či antiflogistika, která mají protizánětlivé a antiedematózní účinky.

Preparáty s obsahem kortikoidů jsou vyhrazeny pouze pro akutní zánětlivé a trombotické komplikace. Tato léčiva působí vazokonstrikčně, protizánětlivě a protisvědivě a jejich účinky nastupují poměrně rychle po aplikaci. Pokud je ovšem pacient využívá příliš dlouho, mohou se objevit lokální i celkové nežádoucí účinky. Z toho důvodu jsou vhodná maximálně na dobu 1–2 týdnů.

Další možnosti konzervativní léčby

Kromě lokálních přípravků existuje i řada dalších způsobů, jak vyléčit hemoroidy pomocí konzervativních metod. Lékaři doporučují třeba teplé obklady nebo sedací koupele v odvarech květů různých bylin, které mají tlumivé účinky. Mezi používané byliny se řadí řebříček obecný, měsíček lékařský nebo heřmánek pravý.

Pomoci ovšem může také výluh z kůry mladých dubových větví, který je bohatý na třísloviny. Ty pomáhají stahovat cévy, brání vzniku otoků a mohou zastavit krvácení, takže se jedná o účinný lék na hemoroidy. Stačí si připravit vlažnou sedací koupel, ve které by měl pacient strávit zhruba 20 minut. Mezi novější metody léčby hemoroidů se pak řadí také chladová terapie.

Bylinky na hemoroidy

Mnozí lidé preferují přírodní léčbu hemoroidů pomocí bylinek. Jak již bylo zmíněno výše, vhodný je například heřmánek pravý, měsíček lékařský nebo řebříček obecný. Kromě toho by mohl pomoci také kostival lékařský, ze kterého se připravuje výluh (2 lžičky kořene je nutné přelít 200 ml vroucí vody a nechat 15 minut louhovat). Do toho se pak namáčí bavlněná látka a ve formě obkladu se přikládá na konečník.

Další oblíbenou bylinou je vilín virginský, který má podobně jako dubová kůra stahující účinky. Použít se dá ovšem i jitrocel kopinatý (podrcené listy, obklad ze silného odvaru). Velice účinný je pak i máří list balšámový, což je stará léčivá rostlina, kterou je možné užívat vnitřně, ale i zevně. Je dostupná v podobě mastí a dají se z ní připravit obklady nebo koupele. Pokud hemoroidy bolí, doporučuje se po každé stolici používat třezalkovou mast, která zmírňuje svědění a pomáhá ke splasknutí otoků.

V boji s hemoroidy pak může pomoci také lněné semínko. Je totiž skvělým zdrojem vlákniny a mastných kyselin, které si lidské tělo neumí samo vyrobit. Napomáhá tedy vyprazdňování, ale zároveň zvláčňuje okolní sliznici. Aby toho nebylo málo, někteří lidé volí také homeopatika na hemoroidy. Vždy je ovšem lepší konzultovat situaci s lékařem, který doporučí vhodný způsob léčby.

Semiinvazivní léčba hemoroidů

Ať už se objeví hemoroidy u dětí, nebo hemoroidy u dospělých, vždy je nutné situaci co nejrychleji efektivně vyřešit. Konzervativní léčbu je u pokročilejších forem onemocnění možné doplnit také instrumentálními zákroky. Některé z nich lze provést ambulantně, jiné však vyžadují hospitalizaci. Vždy ovšem patří do rukou specialisty, kterým je v tomto případě koloproktolog.

Používané instrumentální zákroky:

  • Sklerotizace – jde o chemickou destrukci vnitřních hemoroidálních uzlů, která se provádí pomocí aethoxysklerolu aplikovaného intravarikózně. Tato metoda je vhodná pouze pro hemoroidy I. a II. stupně. Pojí se navíc s rizikem poškození análních svěračů, takže se využívá zřídka.
  • Barronova ligatura – jedná se o metodu mechanické destrukce zvětšených vnitřních hemoroidálních uzlů (II. až III. stupeň závažnosti). V současné době se používá velice často, jelikož je velice účinná. Mezi další benefity patří minimální rizika a nižší pořizovací náklady.
  • DG-HALL a THD – obě tyto metody jsou založené na stejném principu, kdy dochází k cílené ischemizaci vnitřních hemoroidálních uzlů prostřednictvím opichu přívodných hemoroidálních arterií.
  • Fotokoagulace – koagulace infračerveným světlem je založena na tepelném působení světelné energie. Záření je přitom nasměrováno k bázi vnitřního uzlu a koaguluje tkáně do hloubky 3 mm, což vede k přerušení toku krve do hemoroidů a jejich odumření.
  • Bipolární termokoagulace (BICAP) – v tomto případě dochází k přímé koagulaci sliznice a submukózy u báze hemoroidů prostřednictvím bipolární elektrody. Při správném použití je tato metoda nebolestivá a nevyžaduje anestezii.
  • Monopolární termokoagulace (Hemoron, Ultroid) – jde o metodu založenou na principu aplikace pulzně modifikovaného stejnosměrného středněfrekvenčního monofázického proudu do oblasti arteriálních přítoků vnitřních hemoroidů u jejich bází.
  • Bipolární radiofrekvenčně indukovaná termoterapie (RFITT) – principem této metody je lokální termická destrukce patologické tkáně mezi dvěma elektrodami. Tento způsob vyžaduje krátkodobou celkovou anestezii nebo spinální blok při krátkodobé hospitalizaci (nebo případně v systému jednodenní chirurgie).
  • Laserová terapie – zde dochází k odstranění hemoroidů prostřednictvím tepelné destrukce laserem. Tato metoda se nicméně používá poměrně málo, a to z důvodu vyšších pořizovacích nákladů a nebezpečí termického postižení okolních tkání.
  • Argonová plasmokoagulace – jde o způsob tepelné bezkontaktní destrukce tkání, jenž se využívá hlavně ke koagulaci krvácení a k odstraňování lézí gastrointestinálního traktu. Někdy se však využívá i k léčbě hemoroidů.
  • Kryodestrukce – lékaři tkáň vnitřního hemoroidu ničí pomocí nízkých teplot, které se pohybují od –90 do –190 °C. Používá se k tomu tekutý dusík, přičemž samotný zákrok sice bývá nebolestivý, ale po operaci může pacient pociťovat výraznější bolest než v případě jiných zákroků.

Chirurgická léčba hemoroidů

Pokud pacientům způsobují hemoroidy bolest, která se téměř nedá vydržet, objeví se krvácející hemoroidy (obvykle smíšené zevně-vnitřní) nebo se jedná o pokročilé stádium vnitřních hemoroidů (III. nebo IV.), lékaři jsou nuceni přistoupit k nejradikálnějšímu řešení. Tím je operativní léčba, kterou dnes potřebuje zhruba 5–10 % pacientů potýkajících se s hemoroidálním onemocněním.

Operace hemoroidů se provádí vždy v anestezii s dokonalou relaxací svěračů. Ambulantně za pomoci lokální anestezie lze řešit pouze trombotizované zevní uzly a drobné zevní uzly v podobě reziduálních kožních řas. Ty většinou nejsou zdrojem větších obtíží, ale mohou pacientům komplikovat provádění osobní hygieny. Objemné zevní uzly nebo rozsáhlé kožní řasy, které na místě zbydou po vyprázdnění zevních hemoroidů (marisky), je lepší řešit ve svodné nebo celkové anestezii.

Prováděné chirurgické zákroky:

  • Hemoroidektomie dle Milligana-Morgana – je prováděna jako otevřená excize hemoroidů bez sutury sliznice.
  • Hemoroidektomie dle Parkse či Fergusona – obě představují zavřené metody, při nichž dochází k sutuře defektu sliznice s cílenou opichovou ligaturou cévní stopky hemoroidu.
  • Ligasure – jde o přístroj, pomocí kterého se hemoroid resekuje bipolární radiofrekvenční koagulací. Mezi výhody patří minimální krvácení, dobrý přehled v operačním poli a rychlost provedení operace.
  • Harmonický skalpel – v tomto případě lékař odstraní hemoroidální tkáň pomocí vysokofrekvenčního ultrazvukového mechanického kmitání plochy resekčních kleští. Metoda je bezpečná, ale resekce tkáně vyžaduje delší čas.
  • Staplerová hemoroidopexe (Longova operace) – jedná se o zákrok prováděný pomocí cirkulárního stapleru, kterým se resekuje válec sliznice a submukosy včetně cév, které vedou do hemoroidálních uzlů. Přeruší se tak přítok hemoroidálními arteriemi a dojde ke snížení prokrvení vnitřních uzlů i jejich atrofii, čímž se zachová jejich fyziologická funkce, ale dojde k vymizení patologického krvácení a prolabování z anu.

Pokud je nutné přistoupit k operačnímu zákroku, lékaři velice často volí klasickou hemoroidektomii, která je založena na resekci velkých hemoroidálních uzlů a může být otevřená, nebo zavřená. Oproti modernějším metodám má ovšem několik nevýhod, kam patří třeba výraznější pooperační bolestivost nebo delší doba hojení a potřebné rekonvalescence.

Ať už lékař zvolí jakoukoliv metodu, chirurgická léčba vnitřních hemoroidů i dalších možných forem s sebou vždy přináší riziko četných (často i trvalých) komplikací. Sem patří například inkontinence střevního obsahu, ektropium rektální sliznice ve spojení se syndromem vlhké řiti nebo stenóza anu. Právě z toho důvodu je nutné, aby operace prováděl zkušený koloproktolog.

Léčba vnějších hemoroidů

Co pomáhá na vnější hemoroidy? Když pacient zaznamená, že se v blízkosti řitního otvoru nachází podivný útvar, který tam dříve nebýval, obvykle má tendenci jej zatlačit směrem dovnitř. Tento způsob odstranění hemoroidů je však neúčinný a nemá žádný léčebný efekt. Na místě pak může dojít ke vzniku perianálního uzlu, který se rozvíjí vlivem nahromadění sražené krve v cévním pletenci, kde došlo k porušení systému přítoku a odtoku krve.

Ačkoliv mohou být tyto komplikace bolestivé a velice nepříjemné, zevní hemoroidy obvykle mají příznivý průběh, takže není nutné nasazovat žádnou speciální léčbu. Bolest by měla odeznít již během 2–7 dnů, ale zatvrdlina mizí postupně, klidně i několik týdnů. Stává se, že v této době kožní kryt nekrotizuje a někdy se protrhne, což může způsobit krvácení se sraženinami.

Není to sice pravidlem, ale poměrně často dochází k tomu, že po zahojení trombózy na postiženém místě zůstane kožní řasa. Ta se označuje jako mariska, je nebolestivá a pacientům většinou nezpůsobuje žádné výraznější obtíže. Jsou-li však přívěsky větší nebo dokonce vícečetné, mohou pacientům zkomplikovat provádění osobní hygieny.

Co dělat, pokud zaznamenáte vznik vnějších hemoroidů nebo vám tyto útvary začnou způsobovat nepříjemnou bolest? Nejlepším řešením je samozřejmě vyhledat svého ošetřujícího lékaře, který vás prohlédne a na základě vyšetření zvolí vhodný způsob léčby. Situace se dá často vyřešit pomocí lokálních přípravků. Pokud je trombóza větší, pravděpodobně bude nutné útvar naříznout a sraženinu poté odstranit.

Zdroje: solen.cz, internimedicina.cz, khl.cz

  • Žá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 »