Rakovina penisu je v našich podmínkách poměrně vzácná. Co ji způsobuje?

11. 3. 2021 9:12
přidejte názor
Autor: Pixabay

Přestože rakovina penisu v České republice nepatří mezi častá onemocnění, jedná se o velice závažný zdravotní problém, který není radno podceňovat. Za jeho rozvojem většinou stojí nedostatečná hygiena, neblahý vliv však může mít také nákaza virem HPV nebo kouření. Pokud jde o vhodnou léčbu, někdy postačí ošetření laserem nebo drobný chirurgický zákrok, jindy však lékaři musí přistoupit k úplnému odstranění penisu.

Zhoubné nádory penisu

Co se dozvíte v článku
  1. Zhoubné nádory penisu
  2. Výskyt
  3. Příčiny rakoviny penisu
  4. Jaké má rakovina penisu příznaky?
  5. Diagnostika
  6. Léčba rakoviny penisu
  7. Prognóza
  8. Prevence

Zatímco rakovina prostaty se řadí mezi poměrně často diskutovaná témata, o rakovině penisu se příliš nemluví. V našich podmínkách se totiž jedná spíše o vzácný problém, který na většině území Evropy nepatří mezi hojně se vyskytující onemocnění. V některých rozvojových zemích Asie, Afriky nebo třeba Jižní Ameriky ovšem tento druh rakoviny není ničím výjimečným.

Pokud jde o nejrozšířenější druh nádorů penisu (zhruba 95 % případů), jedná se o dlaždicobuněčný karcinom označovaný také jako spinocelulární karcinom. Zbytek tvoří například nádory z Merkelových buněk, malobuněčné karcinomy, melanomy nebo bazaliomy. Kromě toho se lékaři vzácně setkávají také s nádory mezenchymového původu, kam patří fibrosarkom, melanosarkom nebo angiosarkom.

Výskyt

Zhoubné nádory penisu postihují především muže vyššího věku, tedy pacienty starší 40–50 let, výjimkou však není ani výskyt tohoto onemocnění u jedinců před třicítkou. V incidenci karcinomu penisu však lékaři pozorují velké geografické rozdíly. Zatímco v rozvojových zemích jsou počty případů nejvyšší, v populacích, kde se standardně provádí obřízka, je výskyt karcinomu penisu spíše zanedbatelný.

V Evropě, ale i v angloamerickém regionu je rakovina penisu považována za jednu ze vzácných forem nádorových onemocnění, přičemž tyto komplikace tvoří pouze 0,1–2 % všech zhoubných nádorů. V některých zemích Afriky, Asie a Jižní Ameriky se však karcinom penisu řadí mezi velmi časté zdravotní komplikace a představuje zhruba 10–20 % všech maligních tumorů.

Pokud jde o výskyt rakoviny penisu přímo v České republice, incidence je zde poměrně nízká stejně jako ve většině evropských oblastí. Ročně přibude zhruba 70–90 nových případů tohoto onemocnění. Jelikož ale výskyt zhoubných nádorů penisu v posledních letech stoupá, rozhodně byste neměli tyto komplikace podceňovat.

Příčiny rakoviny penisu

Nejdůležitější roli při rozvoji tohoto onemocnění hraje nedostatečná či špatná hygiena předkožkového vaku. Pod předkožkou se pak hromadí bělavá, lehce páchnoucí hmota odborně označovaná jako smegma, která je vedlejším produktem působení bakterií na odloučené buňky sliznice. Ačkoliv nebylo prokázáno, že by smegma samotné bylo karcinogenem, na vznik rakoviny penisu má výrazný vliv.

Pokud muži smegma z předkožkového vaku pravidelně neodstraňují, v uzavřeném prostředí se postupně hromadí, dráždí pokožku a může způsobit rozvoj rakoviny kůže žaludu nebo předkožky. Ke zvýšené tvorbě smegmatu jsou přitom náchylnější pacienti trpící fimózou (zúžení předkožky), kdy předkožku není možné přetáhnout přes žalud a důkladně ho tak umýt.

Kromě výše zmíněných faktorů se na rozvoji rakoviny penisu mohou podílet také další vlivy, jako jsou například některé virové infekce. Jde například o lidský papilomavirus HPV (konkrétně především o kmen HPV-16 nebo HPV-18), který se nejčastěji šíří prostřednictvím pohlavního styku nebo při těsném kontaktu s infikovaným partnerem. U žen pak může být tento virus původcem rakoviny děložního čípku.

Výskyt karcinomu penisu mimo jiné výrazně zvyšuje také používání všech dostupných forem tabákových výrobků, tedy kouření cigaret, žvýkání tabákových listů nebo třeba šňupání tabáku. Mezi další rizikové faktory se pak řadí:

  • chronické dráždění,
  • expozice azbestu,
  • střídání sexuálních partnerů,
  • nízký věk při prvním pohlavním styku,
  • vystavení UV záření (např. léčba PUVA).

Pokud jde o prekancerózy neboli stavy, které předcházejí rozvoji maligního nádoru, lékaři sem řadí například výsev kožního onemocnění lichen sclerosus na penisu (balanitis xerotica obliterans, BXO), ale také cornu cutaneum, což je označení pro „kožní roh“, který má podobu tvrdého zrohovatělého útvaru. Dále sem patří například Queyratova erytroplazie či Bowenova nemoc.

Jaké má rakovina penisu příznaky?

Ještě před vznikem samotného karcinomu penisu často dochází k rozvoji přednádorového ložiska, které se zpočátku nešíří do okolí. Tato forma rakoviny se označuje jako „in situ“ (na místě) a lékaři ji nazývají Queyratova erytroplazie. Jedná se o onemocnění sliznice žaludu, jehož projevem je vznik červeného mechovitého ložiska. Histologicky je přitom podobné jako Bowenova dermatóza.

Nádorové ložisko, které mívá vzhled uzlíku nebo vřídku, se postupem času šíří dále do okolí, čímž dochází k rozvoji klasické formy rakoviny penisu. Tumor pak prorůstá celým penisem a následně se může rozšířit také do lymfatických uzlin v tříslech nebo dokonce vytvořit vzdálené metastázy. Nádor přitom z penisu postupuje dále hlavně prostřednictvím mízních cév.

Typická lokalizace nádoru:

  • žalud penisu (zhruba 48 % případů),
  • předkožka (zhruba 21 % případů),
  • žalud i předkožka (asi 9 % případů),
  • sulcus coronarius penisu (asi 6 % případů),
  • tělo penisu (pouze 2 % případů).

První oblastí, kam se rakovina penisu dále rozšiřuje, jsou lymfatické uzliny v tříslech. Ty mohou zvětšovat svůj objem, stávají se hmatatelnými, ale většinou nebývají bolestivé. Pouze zřídka dosáhne postižení uzlin takového stupně, kdy dojde také k průniku nádoru z uzlin až do podkoží a kůže. Pokud se to však stane, objeví se nádorový vřed, který pacienta obvykle donutí vyhledat lékařskou pomoc.

Fimóza (zúžení předkožky) může delší dobu zakrývat prvotní projevy rakoviny, jako je zarudnutí a vznik uzlíku, takže si muži problému často všimnou až ve chvíli, kdy je příliš pozdě. Část pacientů se pak lékaře rozhodne nevyhledat z důvodu studu. Vždy ovšem platí, že jakmile se kdekoliv na penisu objeví vředovitý, vystouplý a nehojící se útvar, je nutné bezodkladně navštívit ordinaci urologa nebo kožního lékaře.

Charakteristické příznaky rakoviny penisu:

  • zarudnutí,
  • uzel na předkožce nebo žaludu,
  • postupný růst nádorového ložiska,
  • mokvání a rozpad nádoru,
  • nepříjemný zápach,
  • rozšíření nádoru do uzlin.

Diagnostika

Podezření na rakovinu penisu většinou urolog či kožní lékař pojme hned při pohledu na podezřelý útvar na mužském údu, okolní zarudnutí a případně i zvětšené lymfatické uzliny. Vždy je však nutné stanovit také rozsah primárního tumoru, posoudit postižení okolních uzlin a zhodnotit také výskyt vzdálenějších metastáz.

Muži by se rozhodně neměli stydět odborníkovi jakékoliv problematické místo či nebezpečně vypadající vřídky ukázat. S největší pravděpodobností se nejedná o rakovinu, ale spíše o jiné onemocnění. Přítomnost podezřelého útvaru na penisu může znamenat například rozvoj syfilidy nebo přítomnost bradavičnatých výrůstků virového původu, které se označují jako condylomata accuminata.

Jakmile pacient objeví podezřelý útvar na penisu, je nutné provést vyšetření, které rakovinu penisu potvrdí, či naopak vyvrátí. Důležité je především odebrání vzorku podezřelé tkáně (biopsie) a jeho zhodnocení pod mikroskopem, tedy histopatologické vyšetření. Při odběru biopsie je nicméně nutné zahrnout nejen vlastní ložisko nádoru, ale také přilehlou, zdravě působící tkáň.

Postižení tříselných uzlin je následně možné prokázat pohmatem nebo prostřednictvím ultrazvukového vyšetření. Pokud existuje podezření na postižení lymfatických uzlin v pánvi, lékaři využívají také další diagnostické metody, jako je CT (počítačová tomografie) nebo MRI (magnetická rezonance).

V čase určení diagnózy bývají inguinální (tříselné) uzliny hmatné zhruba v 58 % případů, z nichž se v 17–54 % může jednat o metastatické postižení, přičemž zbytek představuje postižení zánětlivé. Uzlinové mikrometastázy se však vyskytují také v případě 20 % pacientů, u kterých uzliny hmatatelné nejsou.

Znáte někoho s rakovinou penisu?

Léčba rakoviny penisu

Každý zhoubný nádor je nutné posuzovat individuálně, včasné odhalení tumoru však může výrazně ovlivnit, jakým způsobem bude léčba probíhat a jaká bude její celková úspěšnost. Zatímco v některých případech stačí například ošetření laserem či chirurgické odstranění nádoru, u pokročilejších tumorů může dojít i k částečnému nebo celkovému odstranění penisu.

Chirurgická léčba rakoviny penisu

Co se týče operativní léčby rakoviny penisu, zde mají lékaři k dispozici celou řadu různých možností. Pokud se jedná o malý povrchový nádor, in situ nádor nebo pacienti odmítají radikálnější léčbu, nejčastěji se provádí ošetření laserem. To zanechává menší nepříznivé následky než klasické chirurgické zákroky, ale vyžaduje delší hojení (zhruba 8–12 týdnů).

Mezi postupy šetřící penis pacienta se dále řadí Mohsovo mikrografické chirurgické odstranění, které se používá především v případě nádorů in situ a zhoubných útvarů menších než 1 centimetr. Jedná se však o poměrně náročnou metodu na techniku i orientaci.

U méně pokročilých forem nádoru se pak provádí také excize neboli konzervativní chirurgické vytětí, což může být například obřízka odstraňující předkožku spolu s nádorem. Kromě toho je možné využít kryoterapii, fotodynamickou terapii, glansektomii či intersticiální brachyterapii (technikou muláže).

Pokud jde o pokročilejší nádory, zde je nutné zvolit radikálnější řešení. Mezi nejčastější způsoby chirurgického ošetření primárního spinocelulárního invazivního karcinomu v tomto případě patří částečné odstranění penisu. Tato léčba většinou mívá dobré výsledky, dochází k místnímu vyléčení a pacienti mohou i nadále močit vestoje.

V případě, že je zhoubný nádor příliš pokročilý a již svou velikostí či umístěním nedovoluje zachování dostatečně dlouhého pahýlu, který by umožňoval močení vestoje, lékaři jsou nuceni přistoupit k úplné amputaci penisu. Močová trubice je pak vyústěna na hrázi, tedy mezi šourkem a konečníkem, takže pacient musí po operaci močit vsedě. Dále pak mohou lékaři provést radikální odstranění penisu spolu s varlaty a šourkem.

Chirurgická léčba postižených uzlin

U pacientů, které v souvislosti s rakovinou penisu trápí zvětšené tříselné uzliny, se provádí také oboustranná radikální inguinální lymfadenektomie. Tento zákrok lékaři vykonávají obvykle v rozmezí od 4 do 6 týdnů po chirurgickém ošetření primárního nádoru. Pokud se tumor již před touto operací nerozšířil mimo tříselné uzliny, může dojít k vyléčení nádorového procesu. Zároveň však mohou nastat komplikace v podobě narušení odtoku mízy z dolních končetin a častého vzniku otoků.

Z tříselných uzlin se nádor může šířit také dále do uzlin pánevních, přičemž zvýšená pravděpodobnost tohoto postižení hrozí pacientům, u nichž rakovina penisu postihla dvě nebo více tříselných uzlin. Chirurgickou léčbu je v tomto případě nutné doplnit také odstraněním pánevních mízních uzlin (pánevní neboli ilická lymfadenektomie).

Radioterapie

Při léčbě povrchových útvarů, které dosahují velikosti maximálně 4 centimetrů, se někdy využívá také radioterapie primárního nádoru ve formě zevního ozařování či brachyterapie. V případě větších invazivních nádorů nemá tato terapie tak velkou úspěšnost, bývá spojena s místními komplikacemi a zároveň není dostatečně rychlá, takže se nádor mezitím může metastaticky rozšířit dále do těla.

Jestliže po radioterapii nádor nevymizí nebo dojde k recidivě jeho růstu, je nutné přistoupit k chirurgickému odstranění penisu. Kromě toho může po radioterapii primárního nádoru následovat také chirurgické odstranění tříselných uzlin. Radioterapie v této oblasti je problematická především z důvodu nemožnosti přesného stanovení rozsahu postižení.

Chemoterapie

Agresivní multimodální léčba pokročilých nádorů penisu (tedy operace nebo radioterapie v doprovodu chemoterapie) dokáže prodloužit bezpříznakové období. Předoperační chemoterapie může pomoci zmenšit nádor, který se prostřednictvím této léčby stane operabilním. Příznivou odpověď může indukovat také v případě metastazujících karcinomů, většinou však pouze částečnou či krátkodobou.

Prognóza

Nejvýznamnějším prognostickým faktorem je postižení lymfatických uzlin. Celkové pětileté přežití se v případě karcinomu penisu pohybuje kolem 52 %. U pacientů s negativními inguinálními uzlinami je to až 66 %, pro nemocné s pozitivními inguinálními uzlinami naopak pouze 27 %. Nejhorší prognózu přitom mají pacienti, u nichž se nádor rozšířil až do uzlin pánve.

Prevence

Nejdůležitějším preventivním opatřením, které by mělo zabránit rozvoji rakoviny penisu, je správná hygiena intimních partií a mytí penisu pod předkožkou. Vhodnou prevencí pak může být také obřízka neboli cirkumcize (odstranění předkožky, která překrývá žalud penisu), která se provádí především u pacientů s fimózou. Není-li tato zdravotní komplikace přítomná, obřízka je u dospělých mužů jako prevence rakoviny již prakticky zbytečná.

U novorozenců obřízka prakticky vylučuje vznik rakoviny penisu. Pokud se pak cirkumcize provádí až ve chvíli, kdy chlapec dosáhne pubertálního věku, není již toto preventivní opatření tak účinné. Například v židovské populaci, kde je obřízka prováděna z náboženských důvodů, nebo v USA, kde se jedná o součást prevence, se invazivní karcinomy penisu téměř nevyskytují.

Mezi další preventivní opatření samozřejmě patří i zanechání kouření, ale pomoci by teoreticky mohlo také proočkování populace proti některým kmenům HPV virů. Tento krok by narušil schopnost virů šířit se mezi lidmi. V současné době se však toto očkování provádí pouze na vyžádání u žen, a to jako prevence rozvoje rakoviny děložního čípku.

Zdroje: linkos.cz, solen.cz, wikiskripta.eu

Kdo se s rakovinou penisu nejvíce potýká?
Zhoubné nádory penisu postihují hlavně muže vyššího věku, tedy pacienty starší 40 let. V rozvojových zemích Afriky, Asie a Jižní Ameriky jsou přitom počty nemocných nejvyšší, zatímco v Evropě či Angloamerice lékaři tento druh karcinomu považují spíše zá vzácné nádorové onemocnění. V populacích, kde se standardně provádí obřízka, je pak výskyt rakoviny penisu výjimečný.
Co vede k rozvoji rakoviny penisu?
Hlavní příčinou vzniku rakoviny penisu je nedostatečná hygiena předkožkového vaku. Pod předkožkou se hromadí smegma, což je bělavá, lehce páchnoucí hmota, která může dráždit pokožku a následně způsobit rozvoj karcinomu kůže žaludu nebo předkožky. Mezi další rizikové faktory patří fimóza (zúžení předkožky), kouření, virové infekce (lidský papilomavirus HPV), ale také expozice azbestu.
Jaké jsou příznaky rakoviny penisu?
Před vznikem karcinomu penisu často dochází k rozvoji přednádorového ložiska, což lékaři označují jako Queyratova erytroplazie. Toto onemocnění sliznice žaludu se projevuje vznikem červeného mechovitého útvaru, který má vzhled uzlíku nebo vřídku. Jakmile se ložisko začne šířit do okolí, dochází k rozvoji klasické formy rakoviny penisu. Tumor prorůstá celým údem, někdy se pak rozšiřuje do lymfatických uzlin a může tvořit i vzdálenější metastázy.
Jak se rakovina penisu léčí?
Každý zhoubný nádor musí lékaři posuzovat individuálně. Pokud jde o malé povrchové útvary, je možné podstoupit například ošetření laserem, Mohsovo mikrografické chirurgické odstranění, kryoterapii nebo obřízku. U pokročilejších tumorů se pak provádí částečné nebo úplné odstranění penisu. Mezi další možnosti léčby patří radioterapie či chemoterapie a je nutné zaměřit se také na postižené tříselné nebo pánevní uzliny.
  • Žá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 »