Obsah železa v potravinách je dobré hlídat. Co je jeho nejlepším zdrojem?

15. 4. 2023 7:30
přidejte názor
ručitel
MUDr. Daniel Petr | Odborný garant článku
„V těhotenství či při menstruaci je potřeba příjem železa navýšit.“

Býváte poslední dobou často unavení, snadno se zadýcháte, trápí vás bolesti hlavy nebo snad pozorujete, že máte neustále studené ruce i nohy? Na vině by mohl být nedostatek železa v krvi, který trápí především ženy a může způsobit také rozvoj anémie. Proto je dobré zaměřit se na vyváženou stravu a konzumovat potraviny bohaté na železo.

Co je železo?

Jedná se o prvek latinsky nazývaný Ferrum (chemická značka Fe), který v lidském organismu plní celou řadu důležitých funkcí. Ačkoliv se obsah železa v těle dospělého člověka pohybuje pouze kolem 4 gramů, což se může zdát jako malé a nepodstatné množství, ve skutečnosti je tento prvek pro člověka nezbytný a jeho nedostatek může vést k rozvoji velice nepříjemných zdravotních komplikací. [1, 2, 34]

Funkce železa

Železo představuje nezbytnou součást hemoglobinu, což je krevní barvivo obsažené v červených krvinkách, které zásobuje buňky kyslíkem. Kromě toho se však vyskytuje také ve svalovém barvivu označovaném jako myoglobin, které zásobuje kyslíkem svaly, a najdete ho i v jednotlivých tělesných orgánech, enzymech a imunitním systému.

Aby lidský organismus správně fungoval, je nutné zajistit pravidelný přísun dostatečného množství vitamínů a minerálů. Železo zde samozřejmě není žádnou výjimkou. Tento prvek obsažený v hemoglobinu a myoglobinu totiž napomáhá transportovat kyslík z plic do veškerých tkání, je důležitý pro dýchání a hraje podstatnou roli také při krvetvorbě.

Kromě toho má železo výrazný vliv na správnou funkci imunitního systému, chrání organismus před radikály, podporuje růst a pomáhá udržovat kvalitu pokožky, vlasů a nehtů. Dále pak železo ovlivňuje kognitivní funkce, podporuje koncentraci, je potřebné pro aktivaci celé řady enzymů a slouží jako katalyzátor různých reakcí. [5, 6, 78]

Doporučená denní dávka železa

Pokud se zajímáte o potraviny obsahující železo, měli byste také vědět, jaká je doporučená denní dávka železa. Podle toho si pak budete moci rozmyslet, jak nejlépe sestavit vyvážený jídelníček. Dospělý člověk by měl denně v průměru doplnit 14 mg železa, ale dárci krve, těhotné a menstruující ženy často potřebují až dvakrát tolik. Konkrétní množství železa je vždy nutné přizpůsobit pohlaví a věku. [9, 10, 11, 12, 13]

Konzumujete ve stravě dostatek železa?

Nedostatek železa

Jelikož železo zastává v lidském těle celou řadu důležitých funkcí, jeho nedostatek může mít na člověka velice výrazný vliv. Prvotní příznaky ale bývají spíše nenápadné. Patří sem celková únava, problémy s koncentrací, podrážděnost a nevysvětlitelný pocit vyčerpání, což souvisí hlavně s tím, že nedochází ke správnému okysličování tkání a organismu se tak nedostává potřebné energie.

Dalším varovným příznakem pak může být třeba brnění v lýtkách a celkový motorický neklid (syndrom neklidných nohou), nápadná bledost v oblasti spojivek, dásní a nehtových lůžek, nevolnost, zácpa, zvýšená lámavost vlasů a nehtů, zimomřivost nebo třeba suchá pokožka. O nedostatku železa přitom často vypovídá také skutečnost, že se člověk zadýchává i bez zvýšené fyzické námahy.

Další možné projevy:

Pokud jde o příznaky nedostatku železa, u každého pacienta mohou být dané obtíže velmi individuální. Zatímco u některých pacientů se organismus na tento problém spojený s nedostatkem kyslíku dokáže do určité míry adaptovat, jindy může deficit železa způsobit velké zdravotní komplikace. Může dojít například k rozvoji sideropenické anémie (známá také jako anémie z nedostatku železa), která je důsledkem porušené rovnováhy mezi příjmem a výdejem železa.

A co přesně za nedostatkem železa vlastně stojí? Tento problém bývá často úzce spojený s krevními ztrátami, kam se samozřejmě řadí i pravidelná menstruace. Příčinou ovšem mohou být i různá onemocnění, která způsobují chronické krvácení, kam patří třeba nádory dělohy, poškození ledvin a močových cest, hemoroidy, žaludeční vředy či jícnové varixy.

Nedostatek železa ovšem může být způsobený také poruchou jeho vstřebávání, přičemž skladba jídelníčku bývá v Evropě na vině spíše výjimečně. Komplikace ale někdy souvisí také s užíváním konkrétních druhů léků, jako jsou glukokortikoidy, acylpyrin či nesteroidní antirevmatika, které mohou způsobovat krvácení sliznice gastrointestinálního traktu. V neposlední řadě se pak deficit železa může projevit v těhotenství, kdy se zvyšuje objem krve v těle nastávající matky a potřeba tohoto prvku prudce stoupá. [14, 15, 16, 17, 18]

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

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

Předávkování železem

Ačkoliv lidský organismus železo pro své fungování potřebuje, příliš velké dávky mohou lidem uškodit stejně jako jeho nedostatek. Pokud budete dlouhodobě užívat větší množství železa, než lékaři doporučují, můžete zaznamenat příznaky předávkování. Projeví se například pálení žáhy, nevolnost, zvracení, průjem, zácpa nebo nepříjemný tlak v břiše.

Železo se ukládá do tkání a může poškozovat srdce, játra nebo třeba slinivku břišní. Důsledkem předávkování pak mohou být také deprese, bolesti kloubů nebo rozvoj některých neurodegenerativních onemocnění.  Abyste vzniku komplikací zabránili, pozor byste si měli dát třeba na opakované krevní transfuze, užívání doplňků s obsahem železa nebo přílišnou konzumaci živočišných produktů. [19, 20, 21, 22]

Železo v potravinách

Pokud člověk konzumuje pestrou stravu, neměl by být problém potřebnou denní dávku železa díky vyváženému jídelníčku získat. Přesto jsou problémy s nedostatkem železa poměrně častou záležitostí, přičemž nejvíce si na tyto obtíže stěžují ženy v období menstruace, nastávající matky nebo pacientky po porodu. Deficit železa ovšem není výjimkou ani u dětí nebo u seniorů.

Ačkoliv si spousta lidí myslí, že existuje pouze jediná forma daného prvku, ve skutečnosti se železo v potravě vyskytuje ve dvou různých variantách. První z nich je hemové železo, které najdete pouze v živočišných produktech, tedy v mase a vnitřnostech. Druhou je pak nehemové železo, s nímž se setkáte v různých rostlinných zdrojích, kam patří ovoce, zelenina nebo třeba luštěniny.

Rozdíl mezi těmito dvěma typy železa je přitom hlavně ve vstřebávání. Zatímco z hemového železa se vstřebává zhruba 10–30 %, u nehemového železa je vstřebatelnost velice nízká. Některé zdroje uvádějí, že se vstřebá zhruba 8–10 %, jiné dokonce tvrdí, že jde pouze o 5 %. Vždy ovšem záleží na formě, v jaké člověk železo přijímá, i na dalších složkách obsažených v jeho stravě. [23, 24, 25, 26]

Jaké potraviny obsahují železo?

Lidé se často domnívají, že zdroj železa v potravinách představují pouze živočišné produkty nebo vnitřnosti, jejichž konzumace není pro řadu z nás zrovna lákavá. Ve skutečnosti ale existuje i mnoho rostlinných zdrojů, které jsou pro doplňování železa vhodné. Kromě toho, že je konzumace těchto produktů důležitá u osob, které ho mají nedostatek, důležitou úlohu hrají potraviny bohaté na železo v těhotenství nebo také během menstruace.

Ovoce

Pokud jde o to, které potraviny obsahují železo, dobrým zdrojem tohoto životně důležitého prvku je například ovoce. A i když se hojně doporučuje konzumovat ho hlavně v čerstvém stavu, v tomto případě postačí klidně ovoce sušené. Vhodné jsou například meruňky (čerstvé i sušené, ale nejlépe nesířené) nebo rozinky. Dalším dobrým zdrojem železa pak mohou být:

  • třešně,
  • višně,
  • jahody,
  • maliny,
  • ostružiny,
  • borůvky,
  • černý rybíz,
  • švestky,
  • hrušky,
  • datle,
  • fíky.

Zelenina

Mezi potraviny s vysokým obsahem železa se řadí také některé druhy zeleniny. Proslulý je v tomto případě hlavně špenát (ačkoliv neobsahuje až tolik železa, kolik lidé v minulosti předpokládali). Dále pak lékaři jako zdroj železa v potravě doporučují třeba červenou řepu, brokolici, chřest, zelí, celer, pórek, hlávkový salát, ale dokonce i mořské řasy.

Ořechy a semínka

Pokud vás netrápí potravinová alergie, vhodným zdrojem železa by mohly být různé druhy ořechů. Největší zastoupení najdete v pistáciích, kešu oříšcích a lískových oříšcích. Kromě toho se doporučují také mandle, para ořechy, piniové oříšky, kokos nebo arašídy. Co se týče semen, zde vedou žebříček ta slunečnicová a sezamová.

Obiloviny a luštěniny

Jestliže se zajímáte o to, v jakých potravinách je železo, možná vás překvapí, že tento prvek najdete také v obilovinách a luštěninách. Pokud hledáte nejlepší způsob, jak tělu poskytnou dostatek tohoto minerálu, zkuste do jídelníčku zařadit:

  • žito,
  • pšenici,
  • oves,
  • ječmen,
  • hrách,
  • červené fazole,
  • červenou čočku,
  • cizrnu,
  • sóju,
  • kukuřici,
  • celozrnnou rýži.

Živočišné produkty

Jak již bylo zmíněno výše, ve velkém obsahují železo potraviny živočišného typu. Sem patří především červené maso a vnitřnosti (játra, ledviny, srdce a mozek zvířat). Odborníci ale doporučují také konzumaci drůbeže, ryb a mořských plodů (škeble, mušle, ústřice, slávky jedlé). Nejlepším zdrojem železa jsou přitom následující potraviny:

  • hovězí játra,
  • kuřecí játra,
  • hovězí maso,
  • jehněčí maso,
  • telecí maso,
  • skopové maso,
  • králičí maso,
  • tuňák,
  • treska,
  • losos.

Další zdroje železa

Pokud máte rádi sladké, jistě vás potěší, že poměrně vysoký obsah železa najdete také v hořké čokoládě a kakaovém prášku. Ideálně byste se přitom měli zaměřit na takové čokolády, které obsahují alespoň 70 % kakaa. Oblíbeným pokrmem s vyšším obsahem železa, který si pochvalují třeba vegetariáni, je pak tofu. Dále můžete vyzkoušet merlík čínský, který je známý také jako quinoa.

Železo v potravinách tabulka

DRUH POTRAVIN OBSAH ŽELEZA
Sušené hříbky 690 mg/kg
Sušené droždí 175 mg/kg
Sója 90–150 mg/kg
Játra 70–150 mg/kg
Čočka 70–110 mg/kg
Mák 80–115 mg/kg
Fazole 50–100 mg/kg
Pažitka 86 mg/kg
Kakao 80 mg/kg
Pórek 75 mg/kg
Vaječné žloutky 70 mg/kg
Pistácie 68 mg/kg
Slunečnicová semínka 67 mg/kg
Kešu ořechy 50–67 mg/kg
Ústřice 60 mg/kg
Cizrna 60 mg/kg
Hrách 45 mg/kg
Hovězí maso 30–50 mg/kg
Ovesné vločky 38 mg/kg
Špenát 33 mg/kg
Olivy 33 mg/kg
Kuřecí maso 18–32 mg/kg
Rozinky 26 mg/kg
Fíky 26 mg/kg
Hořká čokoláda 24 mg/kg

[27, 28, 29, 30, 31, 32, 33, 34]

Jak docílit lepšího vstřebávání železa?

Mezi lékaři je dobře známé, že na absorpci nehemového železa může mít negativní vliv celá řada různých faktorů. I když člověk konzumuje potraviny se železem na denní bázi, na jeho vstřebávání působí nepříznivě třeba konzumace vlákniny nebo mléčných výrobků. Stejný vliv ovšem mohou mít také polyfenoly obsažené v čaji, kávě, červeném víně a dalších potravinách či produktech.

Vstřebávání železa z rostlinných zdrojů je možné zvýšit prostřednictvím současné konzumace vitamínu C. Ten je ve větší míře obsažen například v citrusových plodech, v některých džusech a samozřejmě i v různých ovocných šťávách. Konzumovat by ho měli hlavně jedinci, kteří se vyhýbají živočišným produktům. Dobré jsou ale i kvašené potraviny (zelí, kefír). [35, 36, 37, 38]

Zdroje: lekarna.cz, nzip.cz, to.fnplzen.cz, cs.medlicker.com, fnol.cz, bezpecnostpotravin.cz, wikiskripta.eu, health.clevelandclinic.org, healthline.com, mayoclinic.org, healthdirect.gov.au, nhs.uk, cpzp.cz

Jaká je funkce železa v těle?
Největší podíl železa v těle se nachází v hemoglobinu a myoglobinu. Hemoglobin je přitom krevní barvivo, které se nachází v červených krvinkách, jež jsou zodpovědné za přenos kyslíku z plic. Myoglobin pak představuje barvivo svalové, které se používá k ukládání kyslíku ve svalech. Hlavní funkcí železa v lidském těle je tedy zásobování tkání kyslíkem
Kolik železa lidský organismus potřebuje?
Doporučená denní dávka železa závisí především na tom, zda jste žena, nebo muž, a svou roli zde hraje i to, kolik vám je let. Průměrně by však každý člověk měl přijmout přibližně 14 mg železa za den. U žen, které zrovna menstruují, a u dárců krve by však přijaté množství této látky mělo být až dvakrát vyšší.
Co způsobuje nedostatek železa?
Vzhledem k tomu, že je železo v lidském těle zodpovědné za zásobování tkání a důležitých orgánů kyslíkem, s jeho nedostatkem se pojí celá řada potíží. Osoby s nízkým příjmem železa mohou cítit zvýšenou únavu a podrážděnost. Často se hůře koncentrují a může se u nich objevit také například brnění končetin, bušení srdce, bolesti hlavy či závratě. 
  • Žá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 »