Ocitne se Česko bez pracovních posil? Ukrajince firmy potřebují, ale ti se vrací bojovat

1. 3. 2022
Doba čtení: 6 minut

Sdílet

Ilustrační fotografie. (11/2021)
Autor: Geis CZ s.r.o.
Ilustrační fotografie. (11/2021)
Ohrozí českou ekonomiku případný odliv Ukrajinců, kteří u nás tvoří jednu z největších skupin zahraničních pracovních sil? Některá odvětví jsou na nich závislá.

Válka na Ukrajině má kromě těch přímých a tragických i nespočet různých vedlejších dopadů a rizik. Jedním z nich je odliv ukrajinských pracovníků v případě, že by vývoj válečného konfliktu přinutil tamní vedení země posílat ve velkém povolávací rozkazy i Ukrajincům, kteří dlouhodobě pracují za hranicemi.

České firmy Ukrajince potřebují

Některá odvětví jsou totiž na pracovnících z Ukrajiny v současnosti vyloženě závislá. Ukrajinci pracují ve stavebnictví, průmyslu, službách, ale i ve zdravotnictví a dalších oborech. Díky řízené ekonomické migraci ČR se stal z Ukrajiny hlavní zdroj pracovní síly u nás. Naše ekonomika se doslova stala na Ukrajině závislá. Dnes je u nás z Ukrajiny již 30 % z celkového počtu cizinců. Po Slovácích mluvíme o druhé nejpočetnější skupině v ČR. Celkem se jedná zhruba o 200 tisíc lidí, uvedla pro server Měšec.cz Jitka Součková, marketingová ředitelka agentury Grafton Recruitment, která měla loni přes tisícovku a letos má kolem sedmi set agenturních zaměstnanců právě z Ukrajiny.

Pokud by se museli Ukrajinci ve velké míře vrátit na základě povolávacích rozkazů do své země, byl by to pro nás obrovský problém, protože naši subdodavatelé dlouhodobě zaměstnávají řadu agenturních pracovníků z Ukrajiny. V celém stavebnictví je asi dvacet tisíc pracujících Ukrajinců a ty stavby na nich jsou závislé, řekl nám také mluvčí společnosti Metrostav Vojtěch Kostiha.

Zaměstnavatelé musí Ukrajince s povolávákem pustit

Svaz obchodu a cestovního ruchu ČR (SOCR ČR) v souvislosti s povolávacími rozkazy upozornil, že pokud občan Ukrajiny, který je zaměstnancem českého zaměstnavatele, požádá v souvislosti s povolávacím rozkazem, který obdržel, o poskytnutí pracovního volna, jde podle našeho názoru o nepojmenovanou jinou důležitou osobní překážku v práci podle § 199 zákoníku práce a zaměstnavatel je v daném případě povinen omluvit nepřítomnost zaměstnance v práci. Podle Svazu zaměstnanci v takové situaci nenáleží náhrada mzdy nebo platu od zaměstnavatele za dobu trvání překážky v práci, ledaže by ji zaměstnavatel poskytl nad rámec zákona.

S ohledem na to, že zaměstnavatel je povinen takovou nepřítomnost v práci omluvit, nejde podle Svazu o výpovědní důvod pro rozvázání pracovního poměru výpovědí ze strany zaměstnavatele.

Další podrobnosti najdete na webu Svazu obchodu a cestovního ruchu ČR.

Nábor na Ukrajině nyní nefunguje

Z pochopitelných důvodů nábor nových pracovníků přímo na Ukrajině nyní nefunguje. Jedním z důvodů je vyhlášení mobilizace, kvůli které nesmí muži v produktivním věku (18–60 let) opouštět Ukrajinu.

Konzuláty, které vyřizují víza, jsou navíc zavřené. Došlo k uzavření konzulátů, a tedy k úplnému pozastavení příjmu žádostí o víza, což velice negativně ovlivní české firmy, které s příjezdy ukrajinských pracovníků počítají, uvedla pro server Měšec.cz Olga Skopová, International Mobility Manager z agentury Trenkwalder, která v současnosti zprostředkovává práci řádově stovkám Ukrajinců.

Ministerstvo ohlásilo volný přístup na pracovní trh

Co tedy dělat, aby stát zabránil případnému odlivu pracovních sil? Ministerstvo práce a sociálních věcí (MPSV) na svém Twitteru ubezpečilo, že lidé, kteří přijdou z Ukrajiny, budou mít volný přístup na český pracovní trh.

Pokud jde o současný postup na trhu práce, cizinci s uděleným speciálním vízem mohou požádat o povolení k zaměstnání. To vyřizuje příslušná krajská pobočka Úřadu práce. Před podáním žádosti je třeba již mít pracovní místo a se zaměstnavatelem uzavřít pracovní smlouvu. Ta je jednou z příloh žádosti o povolení k zaměstnání. Dalším krokem je již samotné podání žádosti, které může podat cizinec sám nebo prostřednictvím zaměstnavatele, vysvětluje MPSV podrobněji v tiskovém prohlášení.

Pro ukrajinské občany je i nadále otevřená možnost bezvízového pobytu na území ČR a dalších států schengenského prostoru. Ministerstvo vnitra spustilo i vydávání speciálních dlouhodobých víz na základě žádostí podávaných na území ČR, připomněla také Hana Malá z tiskového odboru Ministerstva vnitra ČR.

Co musí uprchlíci z Ukrajiny po příchodu do ČR udělat?

Informace související s povolením k pobytu v návaznosti na konflikt na Ukrajině a informace o prodlužování víz lidem z Ukrajiny jsou k dispozici na webových stránkách Ministerstva vnitra.

Informace pro zaměstnavatele a obyvatele Ukrajiny ohledně zaměstnávání zase na webu MPSV.

Informace o zdravotním pojištění jsou k dispozici na webu Ministerstva zdravotnictví.

Na území ČR mohou uprchlíci z Ukrajiny v rámci bezvízového styku pobývat po dobu 90 dní. Pokud budou ubytovaní v soukromí, musí se zaregistrovat na Policii ČR. V ostatních případech registraci zajistí ubytovatel. Pokud budou chtít začít pracovat, mohou si požádat o speciální druh dlouhodobého víza, které se vyřizuje na pracovištích Odboru azylové a migrační politiky Ministerstva vnitra. V návaznosti na to je pak možné najít si práci a na Úřadu práce si vyřídit povolení k zaměstnání.

Pro pobyt v ČR je nutné mít zdravotní pojištění. Při udělení speciálního dlouhodobého víza budou uprchlíci z Ukrajiny automaticky zařazeni do veřejného zdravotního pojištění. Více informací najdete na webu Ministerstva zdravotnictví.

Občané Ukrajiny, kterým Ministerstvo vnitra udělilo speciální vízum, mohou také žádat o dávky pomoci v hmotné nouzi – příspěvek na živobytí, doplatek na bydlení, příspěvek na bydlení a mimořádnou okamžitou pomoc.

Využít mohou také aplikaci pro hledání volných pracovních míst v ČR. Zaměstnavatelé v ČR mohou naopak nabízet volná pracovní místa migrantům z Ukrajiny přes ředitele příslušné krajské pobočky ÚP ČR nebo pracoviště ÚP ČR.

Důležité weby, infolinky, odkazy:

Důležité informace pro občany Ukrajiny v češtině i ukrajinštině najdete na webu Ministerstva vnitra a na připravovaném webu nasiukrajinci.cz, kde se má koordinovat nabízená a poptávaná pomoc pro ukrajinské uprchlíky.

Praktické pobytové informace se dozvíte na infolince +420 974 801 802 a adrese [email protected].

Konkrétní nabídky, ideálně na ubytování hromadného typu se stravováním, můžete posílat na e-mail Správy uprchlických zařízení MV [email protected].

Podnikatelé se mohou s nabídkami pomoci pro ukrajinské občany i firmy obracet také na Hospodářskou komoru ČR na e-mailovou adresu [email protected].

ČTK také přinesla zprávu, že Evropská unie se podle agentury Reuters chystá uprchlíkům z Ukrajiny poskytnout možnost zůstat v členských zemích a legálně zde pracovat až tři roky.

Co by ještě pomohlo?

Podle Gabriely Hrbáčkové z Řídicího výboru Sdružení pro zahraniční investice by dále pomohlo urychlení vízového procesu pracovníků z jiných zemí než je Ukrajina tak, aby zástupci ambasád a úřadů mohli postupovat co nejrychleji, navýšení kvót i kapacit zastupitelských úřadů. Za revoluční a dobrou myšlenku považujeme dát amnestii ukrajinským občanům na území Česka a dát jim možnost zlegalizovat jejich pobyt a pracovat v ČR, dodala Hrbáčková.

bitcoin_smenarna

O potřebě navýšit kvóty se zmínil také Zdeněk Zajíček, viceprezident Hospodářské komory ČR, která předpokládá zvýšený zájem zaměstnavatelů o pracovníky z jiných zemí a jež upozornila na dlouhodobě nedostatečně nastavenou kvótu pro některé země v rámci Programu kvalifikovaný zaměstnanec: Zejména Indie, Kazachstán, Moldavsko a Mongolsko jsou země, kde dlouhodobě podle našich členů nekoresponduje nastavená kvóta se zájmem českých zaměstnavatelů o zahraniční pracovníky. Ta mnohdy převyšuje několikanásobně nastavenou kvótu, což způsobuje prodloužení vyřízení zaměstnanecké karty zahraničního pracovníka a tím dobu nástupu u českého zaměstnavatele.

Bylo by dobré, kdyby vláda zvážila i rozšíření a zjednodušení vládních programů pro zaměstnávání cizinců. Podle zpráv z médií vláda i tyto kroky minimálně zvažuje. Přístup vlády v tomto směru je konstruktivní a aktivní, to je třeba ocenit. Je to dobrá změna oproti tomu, na co jsme byli od vlády zvyklí v minulých letech, řekla nám také Lutfia Volfová, mluvčí společnosti Rohlík.cz, a dodala, že velmi vítá také informaci, že česká vláda umožnila prodloužení krátkodobých víz ukrajinských občanů v ČR bez nutnosti vycestovat zpět na Ukrajinu.

Vážení čtenáři, situaci na Ukrajině se věnujeme napříč servery, které spadají pod našeho vydavatele, společnost Internet Info. Nabízíme vám výběr některých textů:

POMOC PRO UPCHLÍKY

DOPADY NA ČESKÝ PRŮMYSL
EKONOMICKÉ SOUVISLOSTI
IT A KYBERBEZPEČNOST
RADY NEJEN PRO RODIČE
'; 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 »