Žádná smaženice a řízky. Takhle si připravovali houby naši předkové

6. 10. 2024

Sdílet

Houbaření považujeme za jednu z kratochvílí patřících k podzimu. Dříve však nešlo jen o zábavu, ale o důležitou součást jídelníčku. Lidé si předávali mnoho způsobů, jak houby upravit. Pokud se vám už zajídá smaženice, nechte se inspirovat houbovými recepty našich předků – ale pozor, jejich tipy proti otravě nezní moc účinně.

Archeologové a historici mají celou sbírku různých informací o tom, jak se houby dříve používaly. Nešlo pouze o další přísadu do polévky, ale také o významný prvek kulturní sounáležitosti. Konzumace hub odlišovala některé národy od jiných, podobně jako dnes, ale také dělila urozené lidi od chudých a učené od prostých.

Římané milovali lanýže

Nejstarší důkazy konzumace hub, o kterých se na internetu dočteme, měly být nalezené na 13 tisíc let starých vykopávkách v Chile. Namísto archeologické studie je však k této informaci citován report o lesních produktech na území Ekvádoru. Spolehlivě podložena je přítomnost dvou kusů hub u Ötziho, přírodní mumie muže, který žil ve 4. tisíciletí př. n. l. v Alpách. Kloboučky hub se dochovaly v původním tvaru a jde o březovník obecný (Piptoporus betulinus). Zamlada jsou plodnice prý jedlé, také má ale tato houba projímavé účinky. Předpokládá se, že ji Ötzi využíval ne na jídlo, ale proti parazitům.

První prokazatelně velkou érou hub je antika. Staří Egypťané pokládali houby za rostliny nesmrtelnosti od boha Usira a vyhrazovali je vládnoucímu rodu. Více toho však víme o houbách u evropských starověkých národů. Mykolog Reginald Buller v roce 1914 jmenuje jako oblíbené houby Řeků a Římanů lanýže, hřiby a pýchavky. Zaznamenaná je obliba hub zejména u bohatších vrstev. Zkazku o způsobu jejich přípravy lze najít například v Juvenalově Satirách. Lanýže se před přípravou loupaly a hřiby se i nakládaly.

Bedly, které na řezu zčervenají, raději nejezte. Mohou vyvolat zdravotní potíže Přečtěte si také:

Bedly, které na řezu zčervenají, raději nejezte. Mohou vyvolat zdravotní potíže

Několik římských receptů skýtá Apiciova kuchařka De re coquinaria libri decem. První možnost je podusit houby ve víně s koriandrem a před servírováním bylinu odstranit. Jiný recept je doporučuje uvařit ve vývaru a posolit. Další radí podusit krájené houby a pak ochutit pepřem, libečkem, medem, olejem a vývarem. Apicius popisuje také sedm různých úprav konkrétně lanýžů, například s pepřem, římským kmínem, mátou, celerem, routou a octem, případně zabalené ve vepřové bláně.

Smrže na másle a vaječné šišky

A co naše houbové tradice? Ty jsou doloženy až od pozdního středověku a raného novověku. V českých zemích měla společnost k houbám úplně jiný přístup než starověcí Egypťané a Římané. Zatímco tam byly houby pro urozené, u nás je mnohem více konzumoval prostý lid

Místní knihy z 15.–17. století uvádějí rozličné recepty. Častá byla kombinace hub s vejci, která v podobě míchaných vajíček vlastně přežívá dodnes. Lidé houby například rozkrájeli a s použitím vejce z nich nadělali šišky či placky, které smažili. K houbám se dávala zelená petrželka, máslo či smetanová omáčka. Když byl půst, vejce a máslo se vyměnily za mandlové, makové či konopné mléko. Ke kořenění hub se užívaly pepř, kmín, šalvěj či jalovec.

V roce 1554 přichází z Itálie do Prahy italský lékař a botanik Pietro Andrea Mattioli. O dekádu později vychází český překlad jeho díla Herbář neboli Bylinář. Kniha se proslavila po Evropě díky bohatství informací o druzích rostlin i kvalitním ilustracím. Kromě rostlin se z ní dozvídáme i o deseti druzích hub, které Evropané v 16. století jedli.

Houby vlastně nejsou moc zdravé. A jsou místa, kam je lepší na ně nechodit Přečtěte si také:

Houby vlastně nejsou moc zdravé. A jsou místa, kam je lepší na ně nechodit

Jako první Mattioli jmenuje dva druhy smrže – ten první z nich jako houbu gurmánů. Smrž se posypal nadrceným pepřem a opekl, poté uvařil s máslem a kořením, bohužel zde nespecifikovaným. Smrže se pekly také v horkém popelu, někteří lidé je jedli i syrové se solí. 

Dalším druhem je hřib – ten se loupal a upravoval rovněž na másle. Solily, pepřily a pekly se také ryzce. Houba popsaná Mattiolim pouze německy coby Pfifferling (zřejmě šlo o lišku jedlou) měla prý sama o sobě chuť podobnou pepři. Jinou houbu, Heyderling (zřejmě šlo o pečárku neboli žampión) Němci dokonce standardně jedli syrovou. V herbáři se mezi desaterem druhů hub objevuje také kotrč a pár dalších hub jen s německým jménem a stručným popisem.

Česnek proti otravě?

Mattioli houby zmiňoval také v popisu některých rostlin. Tvrdil například, že pálivost česneku potlačuje účinky jedů, tudíž by se měly houby upravovat s česnekem jako prevence otravy. Jiným takovým prostředkem měla být jihoevropská květina routa vonná, případně třeba plané hrušky anebo křen. Kromě toho si lidé měli obecně dávat pozor, aby se houbami nezadusili. Pokud již otrava nastala, doporučoval Mattioli vypít pelyňkový odvar s octem.

Nejen hříbky, ale i muchomůrky a pečárky. Ukažte, co víte o houbách

Pár lidí dokáže odolávat. Ale podzim co podzim se nakonec do lesa alespoň pro pár hub vydají jedinci, které to jindy zase tak moc nebere. Stačí, aby se na sociálních sítích a v médiích začaly objevovat fotky úlovků z lesa. Co všechno však o houbách víme? Zkuste si ověřit svoje znalosti v našem testu.

Otrava houbami rozhodně nastávala a byla důvodem k obavám častěji než dnes. Archeoložka Magdalena Beranová uvádí například dochovanou zmínku o otravě houbami u Polabanů (slovanského etnika známého také jako Vendové) z roku 1018. Dvorní lékař Ferdinanda I. Jan Kopp z Raumenthalu před houbami varuje a píše: V těchto zemích hub pojídáme mnoho, ale jsou všechny škodlivy – což zase také není úplně pravdou.

Polský kněz a lékárník Marcin z Urzędowa byl podobného názoru, a to kvůli zkušenostem, které popisuje ve svém Herbáři polském z poloviny 16. století: Houby jsou ze své nátury špatné, neboť činí zlou krev v člověku. (…) Viděl jsem, kdy jeden jedl houby, ty ho v prsou dusily a hryzaly, až ho umořily. (…) Jestli jich někdo sní mnoho, člověku zaškodí. Těžko je tráví žaludek a člověka dusí a dáví, cholerickou nemoc způsobují, to je běhavka žlutá. Já jsem viděl jednoho, který je sobě čerstvé napekl a nasmažil, ale potom Bohu slíbil více jich nejíst, když jej nechaly naživu.

Možná byli lidé více spjati s přírodou než dnes, ale také neměli vždy přístup k odborným atlasům a herbářům. Ostatně, i podle Mattioliho popisů by se nám houby dnes těžko identifikovaly. A navíc, lékařská péče tehdy také neposkytovala dostatečnou úlevu. Není proto divu, že se někteří lidé hub báli.

Galerie: Pozor na jedovaté bedly

Co máme společného s Číňany

Tradice užívání hub není jen evropskou záležitostí. Například je velmi silná v Číně – jak v medicíně, tak i v kuchyni. Podle archeologů začala před nejméně 6000 lety. Už tehdy se používaly houby z rodu Ganoderma, dnes známé jako reiši. 

Nejstarší čínský písemný pramen o houbách je Šen nung pen cchao ťing – Herbář Božského hospodáře z 1. století našeho letopočtu. Ten však zmiňuje jedinou houbu a její účinek proti jedům. Další spisy se objevily až o pár století později. Významnou součástí kuchyně jsou hlívy, šiitake, penízovky či čirůvky. Čína je dodnes také velkým pěstitelem hub, tato tradice začala už za dynastie Tchang v 7.–10. století.

Čína se považuje za typický příklad mykofilní kultury, tedy takové, která miluje houby. Opakem jsou kultury mykofobní, které houby sbírají a zpracovávají jen zřídka. Kromě Číny se k houbovým nadšencům řadí jižní Evropa, Polsko, Rusko, Švédsko či Finsko. Finsko v tomto ilustruje vliv střetu kultur – Skandinávie houbaření moc neholdovala, ale od východu ji začalo svou houbařskou vášní ovlivňovat Rusko.

Nejhorší otravu z hub nepoznáte, projeví se až za celé týdny a příznaky jsou atypické Přečtěte si také:

Nejhorší otravu z hub nepoznáte, projeví se až za celé týdny a příznaky jsou atypické

Mykofobní, na druhou stranu, je například Velká Británie. Další příklad jsou země Jižní Ameriky. Takřka jediní, kdo tam houbaří, jsou Mexičané. Přitom kontinent je na jedlé houby bohatý, hlavně Amazonie. Některé domorodé národy, například kmen Yanomamo, je výjimkou

Není těžké přijít na to, do které kategorie patří Češi. Tradice houbaření je u nás ostatně tak silná, že ji provozuje i mnoho lidí, kterým houby nechutnají. Inu, ve zdravém těle zdravý duch a jakákoliv záminka pro výlet do lesa je dobrá. Jen je dobré řídit se tím, že najít méně hub a jedlých je lepší než najít více, ale jedovatých.

Autor článku

Studentka doktorského oboru lingvistiky na Masarykově univerzitě. Mimo studium se věnuje psaní textů o cestování, duševním zdraví, umění, literatuře, genderu i na různá další témata.

'; 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'; } }
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; 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 »