Astrologie a medicína: když dobové poznání nestačilo, využil lékař hvězdy

19. 2. 2020

Sdílet

Autor: Wikipedia.org, podle licence: Public domain
Dnes slouží astrologie převážně k účelům sestavování horoskopů a baví čtenáře bulvárních magazínů, dříve jí však byla přisuzována mnohem větší vážnost. Z astrologie vycházela při léčbě nemocných celá řada lékařů.

Astrologie zažívala rozmach zejména v době renesance. Své léčitelské umění s astrologií spojilo nemálo dávných lékařů.

Co se dozvíte v článku
  1. Paracelsovo lékařství a magická medicína
  2. Makrokosmos a mikrokosmos ve vztahu k léčbě
  3. Teorie temperamentu a čtyři živly
  4. Astrologie coby součást medicíny
  5. Když je Měsíc v Kozorohu, nechoďte k zubaři
  6. Astrologie a morová epidemie

Paracelsovo lékařství a magická medicína

Už od pradávna se lidé snažili hledat nejrůznější metody a prostředky, kterými by dokázali zbavit tělo nemoci a uchovat si zdraví. Různé lidské neduhy však neřešila pouze klasická medicína, která teprve postupně zažívala svůj rozmach, ale především se o lidské zdraví staraly babky kořenářky, ranhojiči, šamani nebo lidoví léčitelé. Magická medicína měla svou sílu a přinášela pozitivní výsledky. Studovaní lékaři ale často chtěli vědět více a zajímali se o hermetické nauky, jakými byla například alchymie, astrologie, magie a kabala. Propojování astrologie s medicínou nebylo ničím neobvyklým. Řada významných lékařů léčila podle astrologických principů, a to velice úspěšně.

Jedním z významných lékařů, který praktikoval magickou medicínu a propojoval léčení s astrologií, byl Paracelsus, tedy Philippus Aureolus Theophrastus Bombastus von Hohenheim (1493–1541). Tento německý lékař patří mezi nezapomenutelné středověké osobnosti s výrazným mnohostranným nadáním. Povahou to byl svéráz kritizující uznávané lékařské autority, jakými byli například Hippokrates nebo Avicenna. Uznával hermetické nauky, procestoval kus světa a rád se učil a poznával nové. V době epidemií syfilidy se výrazně zasloužil o její léčbu.

Makrokosmos a mikrokosmos ve vztahu k léčbě

V souvislosti s léčbou a astrologií Paracelsus praktikoval základní principy rovnováhy makrokosmu – vesmíru a mikrokosmu – lidského těla. Právě v lidském těle nacházel astrologická znamení odpovídající planetám a jejich vzájemným interakcím. Nedbal na pověry a řeči, ale raději vsadil na praxi. Šlo mu především o účelnost a praktické využití získaných vědomostí.

Například alchymii rád využíval k léčbě, neuznával ji jako prostředek k výrobě zlata a transmutaci kovů. Každý prvek nebo kov a další symboly používal v souvislosti s astrologickými signaturami a léčil celého člověka komplexně. Vždy mu šlo o celkovou harmonii a vyrovnávání protikladných principů. Ničím neobvyklým nebyla ani výroba amuletů dle postavení hvězd a dalších přísných opatření na míru.

Na Paracelsovu medicínu navazuje například náš známý lékař Tadeáš Hájek z Hájku (1525–1600), který zohledňuje působení nebeských těles a souvztažnost makrokosmu a mikrokosmu. Z Paracelsova učení vycházela celá řada dalších lékařů a učenců, třeba Oswald Croll (1560–1608), který ve svém spise Basilica Chymica pojednává základy výroby léků podle Paracelsem popsaných principů.

Teorie temperamentu a čtyři živly

Představa makrokosmu a mikrokosmu hrála velkou roli už ve starověku. Čtyři živly makrosvěta – oheň, voda, země a vzduch – odpovídají čtyřem tělesným šťávám a také čtyřem typům temperamentu mikrosvěta – lidského těla.

K živlu ohně náleží žlutá žluč, k zemi černá žluč, ke vzduchu sliz a k vodě krev. Tyto základní principy poprvé popsal starověký lékař Hippokrates (460–377 př. n. l.). Později na tuto klasifikaci navázal lékař Galenos (200–216 n. l.) a řada novodobějších psychologů, jako například Ernst Kretschmer (1888–1964) nebo Carl Gustav Jung (1875–1961), kteří z ní vycházeli při tvorbě dalších systémů, teorií temperamentu a podobně.

Astrologie coby součást medicíny

Všechno souvisí se vším a to, co nacházíme v přírodě a v kosmu, úzce souvisí také s vnitřním světem každého živého organismu, tedy s tělem i duší člověka. S tímto pracuje celá řada teorií a systémů, k nimž patří také astrologie neboli hvězdopravectví. Astrologie zkoumá především souvislost toho, co se děje nahoře, s tím, co nacházíme uvnitř člověka. A pakliže tělo onemocní, hledá příčinu i lék tam někde venku. Ostatně i výše zmíněný C. G. Jung, jeden z nejvýznamnějších psychologů dvacátého století, v rámci svého uceleného zkoumání s astrologií laškoval, a to vcelku pořádně.

Mezi známé hermetické lékaře, kteří ve své teorii či praxi propojovali astrologii s medicínou, patřili také významní čeští lékaři z období středověku i novověku. Například to byl blízký přítel známého lékaře Albíka z Uničova (1358–1426), který léčil panovníky a napsal řadu lékařských spisů, ze kterých lze čerpat i dnes. Tento jeho kolega se jmenoval Křišťan z Prachatic (1366–1439), a ačkoliv nebyl tak činný a proslulý jako Albík, právě on propojoval lékařství s astrologií. Jeho oceňovaným spisem je traktát O pouštění krve. Mistr Křišťan ve své praxi zohledňoval vliv nebeských těles na zdraví člověka.

V knize Filozofie medicíny v Českých zemích cituje v kapitole Filozofie medicíny v Českých zemích od 14. po 17. století doc. Tomáš Nejeschleba úryvky z Křišťanových textů. Píše o tom, že dvanáct znamení zvěrokruhu se „vztahuje k různým částem těla“ a podobně i „planety v nich se nacházející tytéž části svým vlivem a mocí mění, posilujíce nebo zeslabujíce přirozené působení daného znamení“. Samozřejmě mistr Křišťan také své pouštění žilou praktikoval podle příhodných dnů na základě postavení hvězd, jinak by to ani nešlo. Uznával, že někdy planety podporují čištění těla těmito prostředky, a jindy jim zase brání. Ostatně Tomáš Nejeschleba v uvedené publikaci uvádí, že v době renesance byla v českých zemích astrologie zcela běžnou součástí medicíny.

Když je Měsíc v Kozorohu, nechoďte k zubaři

Základy Astromedicíny ale položil už Galenos, a to ve spise O kritických dnech. V něm se pojednává o zohlednění kritických dnů v léčebném procesu. Tyto kritické dny souvisí s postavením Měsíce v konkrétním znamení zvěrokruhu, které odpovídá daným orgánům těla. Podle základního astrologického pravidla by se lékařský zákrok neměl vykonávat na orgánech náležejících k danému znamení zvěrokruhu ve dnech, v nichž se v tomto znamení momentálně nachází Měsíc, což lze krásně vysledovat podle lunárního kalendáře.

Obecně podle těchto teorií platí třeba to, že když stojí Měsíc v Kozorohu, neměli byste chodit k zubaři na vážnější zákrok, jakým je například extrakce zubu. Zkušený astrolog by vám nejspíše řekl, že v těchto dnech je lepší se návštěvě zubaře vyhnout úplně. Záleží samozřejmě také na dalších konstelacích. Chirurgické zákroky týkající se konkrétního orgánu by se měly plánovat mimo dny, v nichž Měsíc stojí ve znamení, ke kterému daný orgán náleží. A zkušenost i ukazuje, že by se operace neměly provádět za úplňku. Toto jsou například celkem známé zásady, které se dnes běžně uplatňují v souvislosti s používáním lunárního kalendáře. Můžete jim věřit, ale nemusíte…

Astrologie a morová epidemie

Astrologií se zabýval také významný italský lékař a filozof Marsilio Ficino (1433–1499), který opět propojoval planety s jednotlivými částmi těla, což popisuje ve svém traktátu o lékařství Liber de Vita.

Dalšími propagátory astromedicíny byli anglický lékař, alchymista a rosekrucián Robert Fludd (1574–1637) a italský matematik, astronom, profesor lékařství, filozof a vášnivý šachista Gerolamo Cardano (1501–1576). Pro zdraví člověka se vždy hledaly nejrůznější prostředky. Především v dobách krize bylo zapotřebí vyzkoušet všechno možné. Například během epidemie moru…

Doc. Karel Černý ve své práci nazvané Mor 1480–1730: Epidemie v lékařských traktátech raného novověku sděluje velice zajímavé informace o vztahu medicíny a astrologie v léčbě při morové epidemii v raném novověku. Astrologie tehdy měla přinášet i vysvětlení, proč k takové epidemii vůbec došlo. Příčina se hledala v postavení hvězd, docent Černý píše: „Astrologie se odvolávala na Aristotelovo tvrzení, že veškerý pozemský pohyb vychází z pohybu nebeského. Mezi hlavní nebezpečné konstelace měla patřit především zatmění Slunce, Měsíce a konjunkce některých planet (Saturnu a Marsu nebo také Saturnu a Jupiteru).“ Dále třeba uvádí, že „astrologie nebyla využita k tomu, aby zamlžila empirická zjištění, ale když dobová empirie nestačila, využil lékař hvězdy“. Astrologové se také snažili najít řešení na otázku „proč někdo onemocní a jiný ne“. 

Docent Černý zmiňuje v souvislosti s lékařstvím a astrologií třeba lékaře Manfrediho, ale také lékaře jménem Jean Fernel (1497–1558), u kterého uvádí, že se v jeho díle astrologie „s vědou nesváří, ale plodným způsobem doplňují“ a že se astrologie „stala neočekávaným pomocníkem postupně se vyvíjející moderní vědy“. V současném světě empirických výzkumů a racionálních vědeckých postupů je však astrologie ve značně okleštěné podobě zařazena někam do kategorie bulvárního nesmyslu a prostředku určeného k věštění.

Autor článku

Externí redaktorka a copywriterka píšící pro webové i tištěné magazíny. Zaměřuje se na oblast zdraví, historie medicíny, psychologie, filozofie, etikoterapie a alternativní medicíny.

'; 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 »