CINXE.COM

KBS 뉴스

<!DOCTYPE html> <html lang="ko"> <head> <!-- for global var --> <script type="text/javascript"> var application = {"root_url":"https://news.kbs.co.kr","vod_cloud_front_url_block_international":"http://news-restrict.gscdn.kbs.co.kr","imagePath":"","resourcesPath":"/resources","root_domain":"news.kbs.co.kr","news_map_client_id":"udun63q80x","vod_api_url":"https://static.api.kbs.co.kr/play/1.2/sign","vodDefaultImage":"/resource/image/common/noimg_633_355.png","cdn_api_url_root":"https://static.api.kbs.co.kr","img_path_m_big":"https://img.kbs.co.kr/kbs/620/news.kbs.co.kr","cms_root_domain":"newscms.kbs.co.kr","vod_bucket":"newsvod.s3.kbs.co.kr","news_mobile_map_client_id":"vogmbm9h4v","jebo_root_url":"jebo.kbs.co.kr","defaultImage":"/resource/image/common/noimg_633_355.png","contextPath":"","rootDomain":"news.kbs.co.kr","img_path_m_sm":"https://img.kbs.co.kr/kbs/44/news.kbs.co.kr","img_path_m_thum":"https://img.kbs.co.kr/kbs/160/news.kbs.co.kr","resource_root_url":"//news.kbs.co.kr","vod_cloud_front_url":"http://news.play.kbs.co.kr","cms_url":"https://newscms.kbs.co.kr","image_bucket":"news-static-prod-kbs","rootUrlPrefix":"https://news.kbs.co.kr","stat_server_url":"stat.kbs.co.kr","api_server_url":"http://localhost/api"}; var user = { loginOn: false }; var noHeader = "false"; var noFlashNews = "false"; var noFooter = "false"; var searchCode = ""; var IMGPATH_MOBILE_THUMB = "https://img.kbs.co.kr/kbs/160/news.kbs.co.kr"; var IMGPATH_MOBILE_BIG = "https://img.kbs.co.kr/kbs/620/news.kbs.co.kr"; var IMGPATH_MOBILE_REPORTER = "https://img.kbs.co.kr/kbs/44/news.kbs.co.kr"; var IMGPATH_MOBILE_RECO = "https://img.kbs.co.kr/kbs/160"; //var MEMBER_ID = ''; </script> <!-- 변수 선언 start --> <!-- 변수 선언 end --> <script> var darkMode = "false"; if (navigator.cookieEnabled) { if (localStorage) { if (localStorage.getItem('dark-mode')) { darkMode = localStorage.getItem('dark-mode'); } } } var isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; if (darkMode) { document.documentElement.dataset.dark = darkMode; } else { document.documentElement.dataset.dark = isDarkMode.toString(); } </script> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-status-bar-style" content="black" /> <link rel="shortcut icon" href="/resource/image/common/v1/favicon/favicon.ico" /> <link rel="shortcut icon" href="/resource/image/common/v1/favicon/favicon.png" /> <link rel="apple-touch-icon" href="/resource/image/common/v1/favorite/favorite.png" /> <!-- generatePageEventId --> <script src="/js/common/generatePageEventId.js" ></script> <!-- Google Tag Manager --> <script> (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-M7J7R5'); </script> <!-- End Google Tag Manager --> <!-- 안드로이드 홈화면추가시 상단 주소창 제거 --> <meta name="mobile-web-app-capable" content="yes"> <!-- ios홈화면추가시 상단 주소창 제거 --> <meta name="apple-mobile-web-app-capable" content="yes"> <!-- additional head area --> <meta name="title" content="2019 북미정상회담 [16시 뉴스특보]" /> <meta name="url" content="https://news.kbs.co.kr/news/pc/view/view.do?ncd=4147650" /> <meta name="description" content="KBS 뉴스" /> <meta name="keywords" content="KBS, KBS 뉴스, KBS뉴스, 뉴스, KBS NEWS" /> <!-- 페이스북 / 카카오 스토리 --> <meta id="facebook_title" property="og:title" content="2019 북미정상회담 [16시 뉴스특보]" /> <meta property="og:site_name" content="KBS 뉴스" /> <meta property="og:type" content="article" /> <meta id="facebook_url" property="og:url" content="https://news.kbs.co.kr/news/pc/view/view.do?ncd=4147650"/> <meta id="facebook_img" property="og:image" content="http://news.kbs.co.kr/data/news/2019/02/27/4147650_40.jpg"/> <meta id="facebook_img_secure" property="og:image:secure_url" content="https://news.kbs.co.kr/data/news/2019/02/27/4147650_40.jpg"/> <meta id="facebook_desc" property="og:description" content="KBS 뉴스"/> <!-- 트위터 --> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="KBS 뉴스"> <meta name="twitter:title" content="2019 북미정상회담 [16시 뉴스특보]"> <meta name="twitter:creator" content="KBS 뉴스"> <meta name="twitter:image" content="https://news.kbs.co.kr/data/news/2019/02/27/4147650_40.jpg"> <meta name="twitter:description" content="KBS 뉴스"> <!-- Google --> <meta itemprop="name" content="2019 북미정상회담 [16시 뉴스특보]"> <meta itemprop="description" content="KBS 뉴스"> <meta itemprop="image" content="https://news.kbs.co.kr/data/news/2019/02/27/4147650_40.jpg"> <link rel="manifest" href="/resource/manifest/manifest.json"> <link rel="canonical" href="https://news.kbs.co.kr/news/view.do?ncd=4147650" /> <!-- #ifb alternateUrl <link rel="alternate" href="" /> /ifb --> <!-- owl carousel slider --> <title>KBS 뉴스</title> <!-- script --> <script type="text/javascript" src="/resource/module/jquery-3.7.1/jquery-3.7.1.min.js"></script> <script type="text/javascript" src="/resource/module/dayjs-1.11.10/dayjs.min.js"></script> <script type="text/javascript" src="/resource/module/dayjs-1.11.10/plugin/duration.js"></script> <script type="text/javascript" src="/resource/module/dayjs-1.11.10/locale/ko.js"></script> <script> dayjs.extend(window.dayjs_plugin_duration); dayjs.locale(dayjsLocaleKo, null, true); </script> <script type="text/javascript" src="/resource/module/swiper-11.0.5/swiper-bundle.min.js"></script> <script type="text/javascript" src="/resource/module/jquery-ui-1.13.2/jquery-ui.min.js"></script> <link rel="stylesheet" href="/resource/module/jquery-ui-1.13.2/jquery-ui.css"> <script type="text/javascript" src="/resource/module/jquery-scrollbar-3.1.5/jquery.mCustomScrollbar.js"></script> <script defer src="https://developers.kakao.com/sdk/js/kakao.min.js"></script> <script type="text/javascript" src="/resource/module/jwplayer-8.27.1/jwplayer.js" ></script> <script type="text/javascript"> jwplayer.key="UsFIIKTGG5dCwbpy/MFAeh8gCKNka+06Oi4PBaWF2/Rz/nk/"; </script> <!-- css --> <link rel="stylesheet" type="text/css" href="/resource/css/pc/common/swiper-bundle.min.css"> <link rel="stylesheet" type="text/css" href="/resource/css/pc/style.css"> <script src="/js/common/common.js?v=20250216211214"></script> <script> /******************************************************* * 공통함수 영역 [s] *******************************************************/ // 브라우저에서 Notification 지원 여부 확인 var isNotificationSupported = 'Notification' in window; if (isNotificationSupported) { // Notification 권한 요청 try { Notification.requestPermission().then(function (result) { if (result === 'granted') { console.log('[Notification] 허용: ', result); } else { console.log('[Notification] 차단: ', result); } }); } catch (error) { console.log(error); } } else { // console.log("Not Supported"); } // 사용자가 푸시 알림을 클릭했을 때의 이벤트 리스너 function onClickNotification(event) { console.log('[푸시알림 클릭]'); event.currentTarget.close(); var url = event.currentTarget.data.url; if (!url) { url = "https://news.kbs.co.kr/news/breaking.do"; } window.open(url); } function sendNotification(obj) { // 푸시 알림 정보 조회 var title = "알림"; if (obj.type == "B") { title = "속보" } var icon = icon || '/resource/image/common/kbsnews_logo.png'; // 아이콘 이미지 var badge = badge || '/resource/image/common/kbsnews_logo.png'; // 배지 이미지 var options = { body: obj.flashEditContents, icon: icon, badge: badge, data: { url: obj.url } }; // 푸시 알림 출력 if (window.Notification && Notification.permission === "granted") { Notification.requestPermission().then(function(result) { if (result === "granted") { navigator.serviceWorker.ready.then(function(registration) { registration.showNotification(title, options); registration.addEventListener("click", function(event) { onClickNotification(event); }); }); } }); } } function checkNotification(data) { var flashNewsNotifiedCodeList = {}; try { flashNewsNotifiedCodeList = JSON.parse(localStorage.getItem("flashNewsNotifiedCodeList")); } catch (e) { } if (flashNewsNotifiedCodeList == null) { flashNewsNotifiedCodeList = {}; } var now = dayjs(); if (data == null) { data = []; } for (var a = 0; a < data.length; a++) { var obj = data[a]; if (flashNewsNotifiedCodeList[obj.flashEditCode]) continue; var startDate = dayjs(obj.regDate + "+0900", 'YYYY-MM-DD HH:mm:ssZZ'); var endDate = dayjs(obj.endDate + "+0900", 'YYYY-MM-DD HH:mm:ssZZ'); if (now.isBefore(endDate) && now.isAfter(startDate)) { flashNewsNotifiedCodeList[obj.flashEditCode] = true; sendNotification(obj); } } try { localStorage.setItem("flashNewsNotifiedCodeList", JSON.stringify(flashNewsNotifiedCodeList)); } catch (e) { } } var headerUi = {}; var headerStickyTriggerPoint window.addEventListener("load", function () { headerUi.worldSelect(); headerUi.navMenuClick(); headerUi.navFixed(); headerUi.searchClick(); headerUi.dimClick(); headerUi.disasterClick(); headerUi.recommendSearch(); }); // 속보 롤링 클릭 event headerUi.breakingNewsClick = function breakingNewsClick(swiper) { headerStickyTriggerPoint = $('.header-nav-wrapper').offset().top; var $btn = document.querySelector(".breaking-news.rolling .arrow-btn"); var $history = document.querySelector(".breaking-news-history-wrapper"); if ($btn) { $btn.addEventListener("click", function () { $btn.classList.toggle("on"); $history.classList.toggle("on"); headerStickyTriggerPoint = $('.header-nav-wrapper').offset().top; footerUi.setAsidePos(); }); } }; // 수직 롤링 함수 headerUi.verticalRollingFn = function verticalRollingFn(swiper) { var retrunValue = new Swiper(swiper, { direction: "vertical", loop: true, loopAdditionalSlides: 1, autoplay: { delay: 2500, disableOnInteraction: false } }); return retrunValue; }; // 날씨 롤링 event headerUi.weatherRolling = function weatherRolling() { headerUi.verticalRollingFn(".weather"); }; // 재난 알림 롤링 event var disasterSwiper; headerUi.disasterRolling = function disasterRolling() { disasterSwiper = headerUi.verticalRollingFn(".disaster-rolling-swiper"); }; // 속보 롤링 event headerUi.breakingNewsRolling = function breakingNewsRolling() { var returnSwiper = headerUi.verticalRollingFn(".breaking-news-swiper"); return returnSwiper; }; // 재난 알림 펼침 클릭 event headerUi.disasterClick = function disasterClick() { $(".disaster-rolling .arrow-btn").off("click").on("click", function () { if ($(this).hasClass("on")) { headerUi.disasterRolling(); $(".disaster-rolling").removeClass("open"); $(this).removeClass("on"); $(".rolling-message").each(function (index, el) { $(el).removeClass("open"); }); $(".rolling-message .caution").each(function (index, el) { $(el).removeClass("off"); }); } else { disasterSwiper.destroy(); $(".disaster-rolling-list").removeAttr("style"); $(".disaster-rolling").addClass("open"); $(this).addClass("on"); $(".rolling-message").each(function (index, el) { $(el).addClass("open"); }); $(".rolling-message .caution").each(function (index, el) { $(el).addClass("off"); }); if ($(".disaster-rolling .swiper-wrapper").height() > 414) { $(".disaster-rolling-swiper").addClass("overflow-y"); } } footerUi.setAsidePos(); }); }; // KBS WORLD 클릭 event headerUi.worldSelect = function worldSelect() { var $menu = document.querySelector("#header .foreign-site-links"); var $btn = document.querySelector("#header .kbs-world-select-btn"); var $dim = document.querySelector(".dim"); if ($btn) { $btn.addEventListener("click", function () { $btn.classList.toggle("on"); $menu.classList.toggle("on"); $dim.classList.toggle("transparent"); $dim.classList.toggle("on"); }); } }; // 햄버거 버튼 클릭 event headerUi.hamburgerClick = function hamburgerClick() { var $btn = document.querySelector(".hamburger-btn"); var $navMenu = document.querySelector(".header-nav"); var $fullMenu = document.querySelector(".full-menu-wrapper"); var $navLinks = document.querySelectorAll(".nav-link"); var $commonMenues = document.querySelectorAll(".common-menu"); var $dim = document.querySelector(".dim"); var $body = document.querySelector("body"); if ($btn) { $btn.addEventListener("click", function () { if ($btn.classList.contains("on")) { $btn.classList.remove("on"); $navMenu.classList.remove("on"); $fullMenu.classList.remove("on"); $dim.classList.remove("on"); $body.classList.remove("hidden"); $navLinks.forEach(function ($navLink) { $navLink.classList.remove("on"); }); $commonMenues.forEach(function ($commonMenu) { $commonMenu.classList.remove("on"); }); } else if (!$btn.classList.contains("on")) { $btn.classList.add("on"); $navMenu.classList.add("on"); $fullMenu.classList.add("on"); $dim.classList.add("on"); $body.classList.add("hidden"); $body.classList.add("on"); } }); } }; // 네비게이션 메뉴 클릭 event headerUi.navMenuClick = function navMenuClick() { var menuNames = ["분야별", "TV 뉴스", "심층취재", "시사프로그램", "지역뉴스"]; var $navLinks = document.querySelectorAll(".nav-link"); var $fullMenu = document.querySelector(".full-menu-wrapper"); var $dim = document.querySelector(".dim"); var $fullMenuNames = document.querySelectorAll("#header .full-menu-wrapper h3"); var $hamburgerBtn = document.querySelector(".hamburger-btn"); var $onNavLink = void 0; var $body = document.querySelector("body"); $navLinks.forEach(function ($navLink) { if ($navLink) { $navLink.addEventListener("click", function () { var menuName = $navLink.innerText; if (menuNames.includes(menuName)) { if ($onNavLink) { $onNavLink.classList.remove("on"); } if (!$hamburgerBtn.classList.contains("on")) { $hamburgerBtn.classList.add("on"); } $navLink.classList.add("on"); $onNavLink = $navLink; $fullMenuNames.forEach(function ($fullMenuName) { var fullMenuName = $fullMenuName.innerText; var $commonMenu = $fullMenuName.parentElement.parentElement; $commonMenu.classList.remove("on"); if (fullMenuName === menuName) { $commonMenu.classList.add("on"); } }); if (!$fullMenu.classList.contains("on")) { $fullMenu.classList.add("on"); $dim.classList.add("on"); $body.classList.add("hidden"); } } }); } }); }; // 서치 버튼 클릭 event headerUi.searchClick = function searchClick() { var $btn = document.querySelector(".hamburger-search-btns .search-btn"); var $closeBtn = document.querySelector(".search .close-btn"); var $hamburgerBtn = document.querySelector(".hamburger-btn"); var $fullMenu = document.querySelector(".full-menu-wrapper"); var $navLinks = document.querySelectorAll(".nav-link"); var $commonMenues = document.querySelectorAll(".full-menu .common-menu"); var $searchMenu = document.querySelector(".search-most-view"); var $dim = document.querySelector(".dim"); var $body = document.querySelector("body"); if ($btn) { $btn.addEventListener("click", function () { if ($fullMenu.classList.contains("on")) { $fullMenu.classList.remove("on"); } if ($hamburgerBtn.classList.contains("on")) { $hamburgerBtn.classList.remove("on"); } $navLinks.forEach(function ($navLink) { $navLink.classList.remove("on"); }); $commonMenues.forEach(function ($commonMenu) { $commonMenu.classList.remove("on"); }); $searchMenu.classList.add("on"); $dim.classList.add("on"); $body.classList.add("hidden"); $body.classList.add("on"); }); } if ($closeBtn) { $closeBtn.addEventListener("click", function () { $searchMenu.classList.remove("on"); $dim.classList.remove("on"); $body.classList.remove("hidden"); }); } }; /** * 스크롤 시 헤더 고정 포인트값 계산 */ headerUi.setHeaderStickyTriggerPoint = function setHeaderStickyTriggerPoint() { const $headerTopMenu = $(".header-nav-wrapper"); headerStickyTriggerPoint = $headerTopMenu.offset().top; } // 스크롤시 네비게이션 메뉴 고정 event headerUi.navFixed = function navFixed() { var menuBar = $(".header-nav-wrapper"); var navLogo = $(".nav-menu .nav-logo"); var menuBarHeight = menuBar.outerHeight(); var $contents = $('#contents'); this.setHeaderStickyTriggerPoint(); $(window).on("scroll", function () { if ($(window).scrollTop() > headerStickyTriggerPoint) { menuBar.addClass("fixed"); navLogo.addClass("on"); $contents.css('padding-top', `${menuBarHeight}px`); } else { menuBar.removeClass("fixed"); navLogo.removeClass("on"); $contents.removeAttr('style'); } }); }; // 딤 화면 클릭 event headerUi.dimClick = function dimClick() { var $dim = document.querySelector(".dim"); var $searchMenu = document.querySelector(".search-most-view"); var $nav = document.querySelector(".header-nav"); var $hamburgerBtn = document.querySelector(".hamburger-btn"); var $fullMenu = document.querySelector(".full-menu-wrapper"); var $navLinks = document.querySelectorAll(".nav-link"); var $commonMenues = document.querySelectorAll(".common-menu"); var $body = document.querySelector("body"); if ($dim) { $dim.addEventListener("click", function () { $dim.classList.remove("on"); $searchMenu.classList.remove("on"); $nav.classList.remove("on"); $hamburgerBtn.classList.remove("on"); $fullMenu.classList.remove("on"); $body.classList.remove("hidden"); $navLinks.forEach(function ($navLink) { $navLink.classList.remove("on"); }); $commonMenues.forEach(function ($commonMenu) { $commonMenu.classList.remove("on"); }); }); } }; // 추천 검색어 headerUi.recommendSearch = function recommendSearch() { var $input = document.querySelector(".header-nav-wrapper .search-box .search-box-input"); var $recommend = document.querySelector(".recommend-search"); var $wrapper = document.querySelector(".search-most-view"); var $dim = document.querySelector(".dim"); if ($input) { $input.addEventListener("focus", function () { $recommend.classList.add("on"); $input.classList.add("focus"); }); } if ($wrapper) { $wrapper.addEventListener("click", function (e) { var target = e.target; if (target !== $input) { $recommend.classList.remove("on"); $input.classList.remove("focus"); } }); } if ($dim) { $dim.addEventListener("click", function () { $recommend.classList.remove("on"); $input.classList.remove("focus"); }); } }; var commonUi = {}; window.addEventListener("load", function () { commonUi.setAllmenuRef(); setTimeout(function () { commonUi.tabClick(); }, 1000); commonUi.localQuickMenu(); commonUi.playlistPopup(); commonUi.programIntroPopup(); commonUi.centerSlide(); // commonUi.yearSlide(); commonUi.onairSchedule(); commonUi.commonToggle(); commonUi.issueTimeLine(); // commonUi.recommendSearch(); commonUi.detailSearchClick(); // commonUi.commonBtnClick(); // commonUi.allCheckClick(); }); // Allmenu ref 세팅: #header를 기준으로 마크업 하고 #footer 에서는 JS로 바꿔준다. // #header : ref=pSiteMap // #footer : ref=pFooter commonUi.setAllmenuRef = function() { $("#footer .full-menu a").each( (idx, el) => { const href = $(el).attr("href").replaceAll(/ref=pSiteMap/gi, "ref=pFooter"); $(el).attr("href", href); } ); } // 탭 클릭 commonUi.tabClick = function tabClick() { $(".tab-btns .tab-btn").off("click").on("click", function () { var id = $(this).closest(".tab-btns").data("tab-contents"); var index = $(this).closest(".tab-btns-list").index(); $(this).closest(".tab-btns-list").siblings().removeClass("on"); $(this).closest(".tab-btns-list").addClass("on"); $("#" + id).find(".tab-contents-list").hide(); $("#" + id).find(".tab-contents-list").eq(index).show(); if (index == 0) { $(".onair-popup-button").show(); } else { $(".onair-popup-button").hide(); } }); }; // 전체선택 체크박스 클릭 commonUi.allSelectClick = function () { var $allSelect = document.querySelector(".all-select input"); $allSelect.checked = false; var $allBoxContents = document.querySelectorAll(".box-contents .box-content .common-checkbox input"); var $checkboxes = []; $allBoxContents.forEach(function(input) { if (getComputedStyle(input.closest('.box-content')).display !== "none") { $checkboxes.push(input); } }); $checkboxes.forEach(function ($checkbox) { $checkbox.checked = false; }); if ($allSelect) { $allSelect.addEventListener("click", function () { if ($allSelect.checked) { $checkboxes.forEach(function ($checkbox) { $checkbox.checked = true; }); } else { $checkboxes.forEach(function ($checkbox) { $checkbox.checked = false; }); } }); } }; // 지역 뉴스 바로가기 클릭 commonUi.localQuickMenu = function () { var $button = document.querySelector(".local-news-quick-menu-button"); var $quickMenu = document.querySelector(".local-news-quick-menu .quick-menu"); var $closeButton = document.querySelector(".local-news-quick-menu .close-button"); if ($button) { var handleClickOnce = function(event) { if (!$button.contains(event.target)) { $button.classList.remove("on"); $quickMenu.classList.remove("on"); document.removeEventListener("click", handleClickOnce); } } $button.addEventListener("click", function () { if ($button.classList.contains("on")) { $button.classList.remove("on"); $quickMenu.classList.remove("on"); document.removeEventListener("click", handleClickOnce); } else { $button.classList.add("on"); $quickMenu.classList.add("on"); document.addEventListener("click", handleClickOnce); } }); $closeButton.addEventListener("click", function () { $button.classList.remove("on"); $quickMenu.classList.remove("on"); document.removeEventListener("click", handleClickOnce); }); } }; // 선택재생 버튼 클릭 commonUi.selectPlayClick = function () { var $wrapper = document.querySelector(".play-buttons-wrapper"); var $selectPlayBtn = document.querySelector(".play-buttons-wrapper .select-play-button"); var $selectCancelPlayBtn = document.querySelector(".play-buttons-wrapper .select-cancel-button"); var $allSelect = document.querySelector(".all-select.common-checkbox"); var $checkboxes = document.querySelectorAll(".thumbnail .common-checkbox"); if ($selectCancelPlayBtn) { $wrapper.classList.remove("on"); $allSelect.classList.remove("on"); $checkboxes.forEach(function ($checkbox) { $checkbox.classList.remove("on"); }); } if ($selectPlayBtn) { $selectPlayBtn.addEventListener("click", function () { $wrapper.classList.add("on"); $allSelect.classList.add("on"); $checkboxes.forEach(function ($checkbox) { $checkbox.classList.add("on"); var $parentAnchor = $checkbox.closest("a"); if ($parentAnchor) { $parentAnchor.setAttribute("onclick", "javascript:checkBox(this)"); $parentAnchor.setAttribute("blockhref", $parentAnchor.getAttribute("href")); $parentAnchor.removeAttribute("href"); } }); }); } if ($selectCancelPlayBtn) { $selectCancelPlayBtn.addEventListener("click", function () { $wrapper.classList.remove("on"); $allSelect.classList.remove("on"); $checkboxes.forEach(function ($checkbox) { $checkbox.classList.remove("on"); var $parentAnchor = $checkbox.closest("a"); if ($parentAnchor) { $parentAnchor.removeAttribute("onclick"); $parentAnchor.setAttribute("href", $parentAnchor.getAttribute("blockhref")); $parentAnchor.removeAttribute("blockhref"); } }); }); } }; function checkBox(_this) { var checkBox = $(_this).find('.common-checkbox input'); if (checkBox) { if (checkBox.is(':checked')) { checkBox.prop("checked", false); } else { checkBox.prop("checked", true); } } } // 플레이리스트 팝업 클릭 commonUi.playlistPopup = function () { var $headerNav = document.querySelector("#header .header-nav-wrapper"); var $dim = document.querySelector(".dim"); var $popup = document.querySelector(".playlist-popup"); var $body = document.querySelector("body"); if ($dim) { $dim.addEventListener("click", function () { $headerNav.classList.remove("index-change"); $dim.classList.remove("on"); if ($popup) { $popup.classList.remove("on"); } $body.classList.remove("hidden"); }); } }; // 프로그램 소개 팝업 관련 이벤트 commonUi.programIntroPopup = function () { var $button = document.querySelector(".common-title-banner .program-introduction-button"); var $closeBtn = document.querySelector(".program-introduction-popup .close-button"); var $closeBtn02 = document.querySelector(".program-introduction-popup .program-introduction-wrapper .close-button"); var $popup = document.querySelector(".program-introduction-popup"); var $headerNav = document.querySelector("#header .header-nav-wrapper"); var $dim = document.querySelector(".dim"); var $body = document.querySelector("body"); if ($button) { $button.addEventListener("click", function () { $headerNav.classList.add("index-change"); $dim.classList.add("on"); if ($popup) { $popup.classList.add("on"); } $body.classList.add("hidden"); }); } if ($dim) { $dim.addEventListener("click", function () { $headerNav.classList.remove("index-change"); $dim.classList.remove("on"); if ($popup) { $popup.classList.remove("on"); } $body.classList.remove("hidden"); }); } if ($closeBtn) { $closeBtn.addEventListener("click", function () { $headerNav.classList.remove("index-change"); $dim.classList.remove("on"); if ($popup) { $popup.classList.remove("on"); } $body.classList.remove("hidden"); }); } if ($closeBtn02) { $closeBtn02.addEventListener("click", function () { $headerNav.classList.remove("index-change"); $dim.classList.remove("on"); if ($popup) { $popup.classList.remove("on"); } $body.classList.remove("hidden"); }); } }; // 슬라이드 함수 commonUi.slideFn = function slideFn(view, slide, pagination, nextBtn, prevBtn) { var retrunValue = new Swiper(slide, { slidesPerView: view, spaceBetween: 0, slidesPerGroup: view, loopFillGroupWithBlank: true, loop: true, pagination: { el: pagination, type: "fraction" }, navigation: { nextEl: nextBtn, prevEl: prevBtn } }); return retrunValue; }; // 내비게이션 없는 슬라이드 함수 commonUi.noNaviSlideFn = function noNaviSlideFn(view, slide, pagination) { var retrunValue = new Swiper(slide, { slidesPerView: view, spaceBetween: 0, slidesPerGroup: view, loopFillGroupWithBlank: true, loop: true, pagination: { el: pagination, type: "fraction" } }); var $pagination = document.querySelector("".concat(pagination)); $pagination.parentElement.classList.add("off"); return retrunValue; }; // 탭스와이퍼 슬라이드 commonUi.tabSwiper = function () { if ($(".tab-swiper-pagination")) { if ($(".tab-swiper-pagination .swiper-slide").length > 1) { var tabSwiper = commonUi.slideFn(1, ".tab-swiper-pagination .swiper", ".tab-swiper-pagination .pagination", ".tab-swiper-pagination .next", ".tab-swiper-pagination .previous"); } else if ($(".news-9-slide .swiper-slide").length <= 4) { var tabSwiper = commonUi.noNaviSlideFn(1, ".tab-swiper-pagination .swiper", ".tab-swiper-pagination .pagination"); } } }; // 탭스와이퍼 슬라이드 클릭 commonUi.tabSwiperClick = function () { var $tabMenues = document.querySelectorAll(".tab-swiper-pagination .tab-menu"); var $contentsWrapper = document.querySelector(".tab-swiper-contents-wrapper"); if ($tabMenues) { $tabMenues.forEach(function ($tabMenu) { $tabMenu.addEventListener("click", function () { if (!$tabMenu.classList.contains("on")) { var $onTabMenu = document.querySelector(".tab-swiper-pagination .tab-menu.on"); $onTabMenu.classList.remove("on"); $onTabMenu = $tabMenu; $onTabMenu.classList.add("on"); var $parentLi = $onTabMenu.parentElement; var $grandUl = $parentLi.parentElement; var btnOrder = Array.from($parentLi.children).indexOf($onTabMenu); var parentOrder = Array.from($grandUl.children).indexOf($parentLi) - 1; var $onContent = document.querySelector(".tab-swiper-content.on"); $onContent.classList.remove("on"); $onContent = $contentsWrapper.children[parentOrder].children[btnOrder]; $onContent.classList.add("on"); } }); }); } }; commonUi.centerSlide = function () { if ($(".sub-page-center-slide").length) { $(document).ready(function () { $(".sub-page-center-slide").owlCarousel({ center: true, items: 3, loop: true, nav: true, autoWidth: true, margin: 24 }); }); } }; commonUi.yearSlide = function () { if ($(".sub-page-year-slide").length) { $(document).ready(function () { $(".sub-page-year-slide").owlCarousel({ items: 11, loop: false, nav: true, autoWidth: true, draggable: false }); }); } }; commonUi.onairSchedule = function () { $(".title-schedule-box .schedule").click(function () { $(".player-schedule").toggleClass("on"); $(".title-schedule-box .arrow-icon").toggleClass("on"); }); $(".onair-player-window .close").click(function () { window.close(); }); }; commonUi.commonToggle = function () { var $toggleBtn = document.querySelector(".common-toggle-button"); if ($toggleBtn) { $toggleBtn.addEventListener("click", function () { $toggleBtn.classList.toggle("on"); }); } }; commonUi.issueTimeLine = function () { var $ul = document.querySelector(".field-timeline"); var $lists = document.querySelectorAll(".field-timeline .timeline-list"); var $lastTimeBadge = document.querySelector(".time-badge-wrapper.last"); var pos = 0; var height; if ($ul) { height = $ul.getBoundingClientRect().height; } if ($lists && $lastTimeBadge) { $lists.forEach(function ($list) { $list.style.top = "".concat(pos, "px"); pos -= 80; }); $lastTimeBadge.style.top = "".concat(pos + 80, "px"); $ul.style.height = "".concat(height + pos + 80, "px"); } }; // 검색결과 추천검색어 // commonUi.recommendSearch = function () { // var $body = document.querySelector("body"); // var $input = document.querySelector(".main-search-area .search-box-input"); // var $recommendSearch = document.querySelector(".main-search-area .recommend-search"); // if ($input) { // $input.addEventListener("input", function () { // $recommendSearch.classList.add("on"); // }); // $body.addEventListener("click", function (e) { // if (e.target !== $input) { // $recommendSearch.classList.remove("on"); // } // }); // } // }; // 검색결과 상세검색 클릭 commonUi.detailSearchClick = function () { var $mainSearch = document.querySelector(".main-search-area"); var $detailSearch = document.querySelector(".detail-search-area"); var $button = document.querySelector(".detail-search-button"); if ($button) { $button.addEventListener("click", function () { $mainSearch.classList.toggle("on"); $detailSearch.classList.toggle("on"); }); } }; // 검색결과 상세검색 공통버튼 클릭 commonUi.commonBtnClick = function () { var $btns = document.querySelectorAll(".detail-search-area .common-button"); $btns.forEach(function ($btn) { if ($btn) { $btn.addEventListener("click", function () { if (!$btn.classList.contains("on")) { var $wrapper = $btn.parentElement; var $onBtn = $wrapper.querySelector(".common-button.on"); $onBtn.classList.remove("on"); $btn.classList.add("on"); } }); } }); }; // 검색결과 체크박스 전체 클릭 commonUi.allCheckClick = function () { var $checkboxsInputs = document.querySelectorAll(".detail-search-area .classification .custom-blue-checkbox input"); var $allCheckInput = document.querySelector(".detail-search-area .classification input"); if ($allCheckInput) { $allCheckInput.addEventListener("click", function () { if ($allCheckInput.checked === true) { $checkboxsInputs.forEach(function ($input) { $input.checked = true; }); } else if ($allCheckInput.checked === false) { $checkboxsInputs.forEach(function ($input) { $input.checked = false; }); } }); $checkboxsInputs.forEach(function ($input) { if ($input !== $allCheckInput) { $input.addEventListener("click", function () { if ($allCheckInput.checked === true) { $allCheckInput.checked = false; } }); } }); } }; var viewUi = {}; var isBreakingNewsLoaded = false; var isLiveNewsLoaded = true; var isHeaderDisasterLoaded = false; var isHeaderNoticeLoaded = false; viewUi.commonIndex = 1; window.addEventListener("load", function () { viewUi.seriesSlide(); viewUi.summaryPopup(); viewUi.ttsClick(); viewUi.navArticleTitle(); viewUi.slideClick(); viewUi.imageClick(); }); // window.addEventListener("scroll", function () { // viewUi.progressBar(); // }); // 슬라이드 함수 viewUi.slideFn = function slideFn(view, slide, pagination, nextBtn, prevBtn) { var retrunValue = new Swiper(slide, { slidesPerView: view, spaceBetween: 24, slidesPerGroup: view, loopFillGroupWithBlank: true, loop: true, pagination: { el: pagination, type: "fraction" }, navigation: { nextEl: nextBtn, prevEl: prevBtn } }); return retrunValue; }; // 내비게이션 없는 슬라이드 함수 viewUi.noNaviSlideFn = function noNaviSlideFn(view, slide, pagination) { var retrunValue = new Swiper(slide, { slidesPerView: view, spaceBetween: 24, slidesPerGroup: view, loopFillGroupWithBlank: true, loop: true, pagination: { el: pagination, type: "fraction" } }); return retrunValue; }; // 시리즈 슬라이드 viewUi.seriesSlide = function seriesSlide() { if ($(".view-series-slide .swiper-slide").length > 4) { var newsNine = viewUi.slideFn(4, ".view-series-slide", ".view-series-pagination", ".view-series-next", ".view-series-previous"); } else if ($(".view-series-swiper .swiper-slide").length <= 4) { var newsNine = viewUi.noNaviSlideFn(4, ".view-series-slide", ".view-series-pagination"); } }; // 요약 팝업 viewUi.summaryPopup = function summaryPopup() { var $btn = document.querySelector(".summary-btn"); var $closeBtn = document.querySelector(".summary-popup .close-btn"); var $popup = document.querySelector(".summary-popup"); var $dim = document.querySelector(".dim"); var $nav = document.querySelector(".header-nav-wrapper"); var $body = document.querySelector("body"); if ($btn && $closeBtn && $popup && $dim && $nav && $body) { $btn.addEventListener("click", function () { $popup.classList.toggle("on"); $dim.classList.toggle("on"); $body.classList.toggle("hidden"); $nav.classList.toggle("index-change"); }); $closeBtn.addEventListener("click", function () { $popup.classList.remove("on"); $dim.classList.remove("on"); $body.classList.remove("hidden"); $nav.classList.remove("index-change"); }); $dim.addEventListener("click", function () { $popup.classList.remove("on"); $dim.classList.remove("on"); $body.classList.remove("hidden"); $nav.classList.remove("index-change"); }); } }; viewUi.ttsClick = function ttsClick() { var $btn = document.querySelector(".tts-btn"); if ($btn) { $btn.addEventListener("click", function () { $btn.classList.toggle("on"); }); } }; viewUi.progressBar = function progressBar() { var $progressBar = document.querySelector(".progress-bar"); var $article = document.querySelector(".view-article"); var $headLine = document.querySelector(".view-headline"); if ($progressBar && $article && $headLine) { var top = window.scrollY + $headLine.getBoundingClientRect().top; var bottom = window.scrollY + $article.getBoundingClientRect().bottom; var totalScroll = bottom - top; var currentScroll = void 0; var progressWidth = void 0; window.addEventListener("scroll", function () { currentScroll = window.scrollY - top; progressWidth = (currentScroll / totalScroll) * 100; if (progressWidth < 0) { progressWidth = 0; } $progressBar.style.width = progressWidth + "%"; }); } }; // 스크롤시 네비게이션 메뉴 기사제목 나오기 viewUi.navArticleTitle = function navArticleTitle() { var navLinks = $(".nav-menu .nav-links"); var hashTagLinks = $(".header-nav .hashtag-links"); var articleTitle = $(".nav-menu .article-title"); headerUi.setHeaderStickyTriggerPoint(); $(window).on("scroll", function () { if ($(window).scrollTop() > headerStickyTriggerPoint) { navLinks.addClass("off"); hashTagLinks.addClass("off"); articleTitle.addClass("on"); } else { navLinks.removeClass("off"); hashTagLinks.removeClass("off"); articleTitle.removeClass("on"); } }); }; // 슬라이드페이지네이션 viewUi.setSlidePagination = function setSlidePagination(currentPage, lastPage) { var $currentPage = document.querySelector(".pagination .current-page"); var $lastPage = document.querySelector(".pagination .last-page"); if ($currentPage) { $currentPage.innerText = currentPage; } if ($lastPage && lastPage) { $lastPage.innerText = lastPage; } }; // 슬라이드 버튼 클릭 viewUi.slideClick = function slideClick() { var $prevButton = document.querySelector(".view-image-slide-wrapper .prev-button"); var $nextButton = document.querySelector(".view-image-slide-wrapper .next-button"); var $images = document.querySelector(".view-image-slide .images"); var lastIndex = void 0; var $imgLists = document.querySelectorAll(".view-image-slide .images .images-list"); var $onImgList = void 0; var $pagination = document.querySelector(".view-image-slide-wrapper .pagination"); var $viewImgClick = document.querySelector(".view-image-click"); var $imagesListDescBox = document.querySelector(".images-list_desc_box-wrapper .images-list_desc_box"); if ($images) { lastIndex = $images.childElementCount; } if ($pagination) { viewUi.setSlidePagination(viewUi.commonIndex, lastIndex); } if ($prevButton) { $prevButton.addEventListener("click", function () { if (viewUi.commonIndex > 1) { viewUi.commonIndex--; $imgLists.forEach(function ($imgList) { $imgList.classList.remove("on"); }); $onImgList = document.querySelector(".view-image-slide .images .images-list:nth-child(" + viewUi.commonIndex + ")"); $onImgList.classList.add("on"); if (viewUi.commonIndex === 1) { $prevButton.disabled = true; } if ($nextButton.disabled) { $nextButton.disabled = false; } if ($viewImgClick) { viewUi.imageSelected(viewUi.commonIndex); } if ($pagination) { viewUi.setSlidePagination(viewUi.commonIndex); } if ($imagesListDescBox) { viewUi.setDescBox(viewUi.commonIndex); } } }); } if ($nextButton) { $nextButton.addEventListener("click", function () { if (viewUi.commonIndex < lastIndex) { viewUi.commonIndex++; $imgLists.forEach(function ($imgList) { $imgList.classList.remove("on"); }); $onImgList = document.querySelector(".view-image-slide .images .images-list:nth-child(" + viewUi.commonIndex + ")"); $onImgList.classList.add("on"); if (viewUi.commonIndex === lastIndex) { $nextButton.disabled = true; } if ($prevButton.disabled) { $prevButton.disabled = false; } if ($viewImgClick) { viewUi.imageSelected(viewUi.commonIndex); } if ($pagination) { viewUi.setSlidePagination(viewUi.commonIndex); } if ($imagesListDescBox) { viewUi.setDescBox(viewUi.commonIndex); } } }); } }; // 슬라이드시 이미지 선택됨 viewUi.imageSelected = function (index) { var $imgClickLists = document.querySelectorAll(".view-image-click .image-click-list"); var $onImgClickList = document.querySelector(".view-image-click .image-click-list:nth-child(" + index + ")"); $imgClickLists.forEach(function ($imgClickList) { $imgClickList.classList.remove("on"); }); $onImgClickList.classList.add("on"); }; // 이미지 클릭시 슬라이드 이동 viewUi.imageClick = function () { var $btns = document.querySelectorAll(".image-click-button"); var $viewImgClick = document.querySelector(".view-image-click"); var childrens = []; var $pagination = document.querySelector(".view-image-slide-wrapper .pagination"); var $imgLists = document.querySelectorAll(".view-image-slide .images .images-list"); var $onImgClickList = void 0; var $imgClickLists = document.querySelectorAll(".view-image-click .image-click-list"); var $images = document.querySelector(".view-image-slide .images"); var lastIndex = void 0; var $prevButton = document.querySelector(".view-image-slide-wrapper .prev-button"); var $nextButton = document.querySelector(".view-image-slide-wrapper .next-button"); var $imagesListDescBox = document.querySelector(".images-list_desc_box-wrapper .images-list_desc_box"); if ($viewImgClick) { childrens = Array.prototype.slice.call($viewImgClick.children); } if ($images) { lastIndex = $images.childElementCount; } $btns.forEach(function ($btn) { if ($btn) { $btn.addEventListener("click", function () { $imgClickLists.forEach(function ($imgClickList) { $imgClickList.classList.remove("on"); }); $onImgClickList = $btn.parentElement; $onImgClickList.classList.add("on"); var $li = $btn.parentElement; var index = childrens.indexOf($li) + 1; viewUi.commonIndex = index; $imgLists.forEach(function ($imgList) { $imgList.classList.remove("on"); }); var $onImgList = document.querySelector(".view-image-slide .images .images-list:nth-child(" + viewUi.commonIndex + ")"); $onImgList.classList.add("on"); if (index === 1) { $prevButton.disabled = true; $nextButton.disabled = false; } else if (index === lastIndex) { $prevButton.disabled = false; $nextButton.disabled = true; } else { $prevButton.disabled = false; $nextButton.disabled = false; } if ($pagination) { viewUi.setSlidePagination(viewUi.commonIndex); } if ($imagesListDescBox) { viewUi.setDescBox(viewUi.commonIndex); } }); } }); }; // 이미지설명 변경 viewUi.setDescBox = function setDescBox(index) { var $imagesListDescBoxList = document.querySelectorAll(".images-list_desc_box-wrapper .images-list_desc_box"); var $onImagesListDescBox = document.querySelector(".images-list_desc_box-wrapper .images-list_desc_box:nth-child(" + index + ")"); $imagesListDescBoxList.forEach(function ($imagesListDescBox) { $imagesListDescBox.classList.remove("on"); }); $onImagesListDescBox.classList.add("on"); }; (function () { const EventType = { LOAD: 'L', SCROLL: 'S', UNLOAD: 'U' } Object.freeze(EventType); class ScrollDepth { #depth; #datetime; #duration; #read; constructor(depth) { this.#depth = depth; this.#datetime = null; this.#duration = 0; this.#read = false; } getRead() { return this.#read } getDepth() { return this.#depth } getDuration() { return this.#duration } getDatetime() { return this.#datetime } updateScrollDepth(datetime, seconds) { this.#read = true this.#datetime = datetime this.#duration = seconds } } class ScrollDepthControlService { actionType = 'scroll' scrollArea = 'article' verticalPercentages = [0, 20, 40, 60, 80, 100]; constructor() { this.scrollDepthList = this.verticalPercentages.map((v, i) => new ScrollDepth(v)) this.viewStartTime = new Date(); this.preScrollTop = 0; this.scrollId = window.pageEventId; this.newsCode = getParameterByName('ncd'); } getSeconds(date) { if (!date) return 0; const duration = date.getTime() - this.viewStartTime.getTime(); if (duration <= 0) return 0; return Math.round(duration / 1000); } getEventMessage(eventType, item) { const now = new Date(); let eventDateTime = dayjs(now).format('YYYYMMDDHHmmss'); let seconds = 0 let depth = 0; switch (eventType) { case EventType.LOAD: eventDateTime = dayjs(this.viewStartTime).format('YYYYMMDDHHmmss') break; case EventType.UNLOAD: seconds = this.getSeconds(now); break; default: depth = item.getDepth(); eventDateTime = item.getDatetime(); seconds = item.getDuration(); break; } return [ this.actionType, this.scrollArea, eventType, depth, this.newsCode, '', eventDateTime, seconds, '', '', '', '', '', this.scrollId ] } sendEvent(eventType, item) { try { const eventMessage = this.getEventMessage(eventType, item); if(eventMessage) window._add_rte(...eventMessage); } catch (error) { console.error("스크롤 이벤트 전송시 에러 발생"); } } triggerEvent(currentScrollDepth) { const newScrollDepthReach = this.scrollDepthList.some(item => currentScrollDepth > item.getDepth() && !item.getRead()) if (!newScrollDepthReach) return; const now = new Date(); const seconds = this.getSeconds(now); this.scrollDepthList = this.scrollDepthList.map((item, index) => { if (item.getRead() || (item.getDepth() > currentScrollDepth)) return item; item.updateScrollDepth(dayjs(now).format('YYYYMMDDHHmmss'), seconds) this.sendEvent(EventType.SCROLL, item) return item; }); } isScrollDown() { let nextScrollTop = window.scrollY; if (this.preScrollTop > nextScrollTop) return false; this.preScrollTop = nextScrollTop; return true } progressBarEvent(articleHeight, articleScrollPosition) { const progressBar = document.querySelector(".progress-bar"); const currentScrollDepthValue = Math.floor((articleScrollPosition / articleHeight) * 100); if (currentScrollDepthValue >= 20 || currentScrollDepthValue <= 100) { progressBar.style.width = `${currentScrollDepthValue}%`; } } scrolling() { const viewTitle = document.querySelector('div.view-headline'); const viewArticle = document.querySelector('div.view-article'); const scrollTop = document.scrollingElement.scrollTop; const viewHeight = document.documentElement.clientHeight; const articleTop = viewTitle.getBoundingClientRect().top + scrollTop; const articleBottom = viewArticle.getBoundingClientRect().bottom + scrollTop; const articleHeight = articleBottom - articleTop; const articleScrollPosition = viewHeight + scrollTop - articleTop; this.progressBarEvent(articleHeight,articleScrollPosition); if (!this.isScrollDown()) return; try { const currentScrollDepth = (articleScrollPosition / articleHeight) * 100; this.triggerEvent(currentScrollDepth); } catch (error) { console.error(error) } } } window.addEventListener('load', () => { let scrollDepthService = new ScrollDepthControlService(); scrollDepthService.sendEvent(EventType.LOAD, null); window.addEventListener("scroll", () => scrollDepthService.scrolling()); window.onbeforeunload = () => scrollDepthService.sendEvent(EventType.UNLOAD, null); }) })(); function getParameterByName(name, url = window.location.href) { name = name.replace(/[\[\]]/g, '\\$&'); var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); } var footerUi = {}; var isPageLoaded = false; window.addEventListener("load", function () { footerUi.selectClick(); footerUi.asideShareClick(); footerUi.asideTxtClick(); footerUi.asideDarkClick(); footerUi.asideCommentClick(); footerUi.asideLikeClick(); footerUi.asideOpenMenuClick(); footerUi.topBtnClick(); footerUi.setAsideToggle(); var asideInterval3 = setInterval(function () { if (isBreakingNewsLoaded && isLiveNewsLoaded && isHeaderDisasterLoaded && isHeaderNoticeLoaded) { window.scrollBy(0, 5); window.scrollBy(0, -5); footerUi.asideFixed(); footerUi.setAsidePos(); clearInterval(asideInterval3); } }, 10) isPageLoaded = true; }); window.addEventListener("resize", function () { if (isPageLoaded) { footerUi.setAsidePos(); } }); // 셀렉트 메뉴 클릭 event footerUi.selectClick = function selectClick() { const $footerSelectBtn = $('.footer-select-btn'); const $commonSelectLink = $('.common-select-links'); $footerSelectBtn.on('click', function() { if($(this).siblings($commonSelectLink).hasClass('on')) { $(this).removeClass('on'); $(this).siblings($commonSelectLink).removeClass('on'); } else { $($footerSelectBtn).removeClass('on'); $($commonSelectLink).removeClass('on'); $(this).addClass('on'); $(this).siblings($commonSelectLink).addClass('on'); } }); $(document).on('click', function(event) { if(($commonSelectLink).hasClass('on')) { removeOnClass(event); } }); function removeOnClass() { if (!$(event.target).closest($footerSelectBtn).length) { $($footerSelectBtn).removeClass('on'); $($commonSelectLink).removeClass('on'); } } }; // 사이드 메뉴 공유 메뉴 클릭 event footerUi.asideShareClick = function asideShareClick() { var $btn = document.querySelector(".aside-btns-list .share-btn"); var $closeBtn = document.querySelector(".share-menu .close-btn"); var $dim = document.querySelector(".dim"); var $menu = document.querySelector(".share-menu"); var $nav = document.querySelector(".header-nav-wrapper"); var $body = document.querySelector("body"); if ($btn) { $btn.addEventListener("click", function () { $dim.classList.toggle("on"); $menu.classList.toggle("on"); $nav.classList.toggle("index-change"); $body.classList.toggle("hidden"); }); } if ($closeBtn) { $closeBtn.addEventListener("click", function () { $dim.classList.remove("on"); $menu.classList.remove("on"); $nav.classList.remove("index-change"); $body.classList.remove("hidden"); }); } if ($dim) { $dim.addEventListener("click", function () { $dim.classList.remove("on"); $menu.classList.remove("on"); $nav.classList.remove("index-change"); $body.classList.remove("hidden"); }); } }; // 사이드 메뉴 텍스트 메뉴 클릭 event footerUi.asideTxtClick = function asideTxtClick() { var $btn = document.querySelector(".aside-btns-list .txt-btn"); var $txtIcon = document.querySelector(".aside-btns-list .txt-btn .txt-icon"); var $btnTxt = document.querySelector(".aside-btns-list .txt-btn .common-btn-txt"); var $menu = document.querySelector(".aside-btns-list .txt-menu"); // 텍스트 메뉴 펼침 if ($btn) { $btn.addEventListener("click", function () { $btn.classList.toggle("on"); $menu.classList.toggle("on"); }); } // 텍스트 메뉴 클릭 $(".txt-menu-btn.large").off("click").on("click", function () { if (!$txtIcon.classList.contains("large")) { $("body").find("*").not(".player-app, .player-app *, #header, #header *, #footer, #footer *, .aisde, .aside *, .header-live-wrapper, .header-live-wrapper *").each(function () { $(this).css("font-size", ""); var size = Number($(this).css("font-size").replace("px", "")) + 1; if (size > 1) { $(this).css("font-size", size + "px"); } }); $txtIcon.className = "txt-icon large"; $btnTxt.innerText = "확대"; } localStorage.setItem("text-size", "large"); $menu.classList.remove("on"); }); $(".txt-menu-btn.normal").off("click").on("click", function () { if (!$txtIcon.classList.contains("normal")) { $("body").find("*").not(".player-app, .player-app *, #header, #header *, #footer, #footer *, .aisde, .aside *, .header-live-wrapper, .header-live-wrapper *").each(function () { $(this).css("font-size", ""); }); $txtIcon.className = "txt-icon normal"; $btnTxt.innerText = "기본"; } localStorage.setItem("text-size", "normal"); $menu.classList.remove("on"); }); $(".txt-menu-btn.small").off("click").on("click", function () { if (!$txtIcon.classList.contains("small")) { $("body").find("*").not(".player-app, .player-app *, #header, #header *, #footer, #footer *, .aisde, .aside *, .header-live-wrapper, .header-live-wrapper *").each(function () { $(this).css("font-size", ""); var size = Number($(this).css("font-size").replace("px", "")) - 1; $(this).css("font-size", size + "px"); }); $txtIcon.className = "txt-icon small"; $btnTxt.innerText = "축소"; } localStorage.setItem("text-size", "small"); $menu.classList.remove("on"); }); }; // 사이드 메뉴 다크 클릭 event footerUi.asideDarkClick = function asideDarkClick() { var $btn = document.querySelector(".dark-btn"); var $btnTxt = document.querySelector(".dark-btn .common-btn-txt"); var $body = document.querySelector("body"); if ($btn) { $btn.addEventListener("click", function () { var isDark = document.documentElement.getAttribute("data-dark") === "true"; if (isDark) { document.documentElement.dataset.dark = "false"; $btnTxt.innerHTML = "\uB2E4\uD06C<br />\uBAA8\uB4DC"; if (navigator.cookieEnabled) { localStorage.setItem("dark-mode", "false"); } } else { document.documentElement.dataset.dark = 'true'; $btnTxt.innerHTML = "\uB77C\uC774\uD2B8<br />\uBAA8\uB4DC"; if (navigator.cookieEnabled) { localStorage.setItem("dark-mode", "true"); } } }); } }; // 사이드 메뉴 댓글 클릭 footerUi.asideCommentClick = function asideCommentClick() { var $btn = document.querySelector(".aside-btns-list .comment-btn"); if ($btn) { var $commentArea = document.querySelector(".comment-area"); $btn.addEventListener("click", function () { $commentArea.scrollIntoView({ behavior: "smooth" }); }); } }; // 사이드 메뉴 좋아요 클릭 footerUi.asideLikeClick = function asideLikeClick() { var $btn = document.querySelector(".aside-btns-list .like-btn"); if ($btn) { var $openMenu = document.querySelector(".like-menu.open-menu"); $btn.addEventListener("click", function () { $btn.classList.toggle("on"); $openMenu.classList.toggle("on"); }); } }; // 사이드 오픈 메뉴 클릭 footerUi.asideOpenMenuClick = function asideOpenMenuClick() { var $btns = document.querySelectorAll(".open-menu-btn"); $btns.forEach(function ($btn) { var $openMenu = $btn.parentElement.parentElement; var $asideBtn = $openMenu.previousElementSibling; if ($btn) { $btn.addEventListener("click", function () { $openMenu.classList.remove("on"); $asideBtn.classList.remove("on"); }); } }); }; // 스크롤시 어사이드 고정 event footerUi.asideFixed = function asideFixed() { var $aside = $(".aside"); var $asideToggle = $(".aside-toggle-button"); $(window).on("scroll", function () { if ($(window).scrollTop() > headerStickyTriggerPoint) { if ($aside) $aside.addClass("fixed"); if ($asideToggle) $asideToggle.addClass("fixed"); } else { if ($aside) $aside.removeClass("fixed"); if ($asideToggle) $asideToggle.removeClass("fixed"); } }); }; // 탑버튼 클릭 footerUi.topBtnClick = function topBtnClick() { var $btn = document.querySelector("#footer .top-btn"); if ($btn) { $btn.addEventListener("click", function () { window.scrollTo({ top: 0, behavior: "smooth" }); }); } }; // 최초 어사이드 포지션 설정 footerUi.setAsidePos = function setAsidePos() { var $aside = document.querySelector("#footer .aside"); var $asideToggle = document.querySelector("#footer .aside-toggle-button"); var $contents = document.querySelector("#contents"); var $iframe = document.querySelector("#contents .iframe-area .inr"); var $headLine = document.querySelector("#contents .main-head-line"); var $headerNav = document.querySelector(".header-nav"); var $viewContentsWrapper = document.querySelector(".view-contents-wrapper"); var $reporterInformationIntroduce = document.querySelector(".reporter-information-introduce"); var $election2024 = document.querySelector("#contents .election-box"); var left = 0; if ($headerNav) { left = $headerNav.getBoundingClientRect().left; } if ($aside) { $aside.classList.remove("hide"); $aside.style.display = ""; $aside.style.left = Math.max(left - 98, 0) + "px"; } if ($asideToggle) { $asideToggle.classList.remove("show"); $asideToggle.style.display = ""; } if (window.innerWidth <= 1300) { if ($aside) { $aside.classList.add("hide"); } if ($asideToggle) { $asideToggle.classList.add("show"); if ($asideToggle.classList.contains("on")) { if ($aside) { $aside.classList.remove("hide"); } $asideToggle.style.left = 47 + "px"; } else { $asideToggle.style.left = 0; } } } if ($iframe) { var top = window.scrollY + $iframe.getBoundingClientRect().top; if ($(".header-nav-wrapper").hasClass("fixed")) { top += 50; } $aside.style.top = top + "px"; $asideToggle.style.top = top + 26 + "px"; } else if ($election2024) { // headLine top = window.scrollY + $election2024.getBoundingClientRect().top; if ($(".header-nav-wrapper").hasClass("fixed")) { top += 50; } $aside.style.top = top + "px"; $asideToggle.style.top = top + 26 + "px"; } else { if ($contents) { top = window.scrollY + $contents.getBoundingClientRect().top + 24; } if ($(".header-nav-wrapper").hasClass("fixed")) { top += 50; } if ($aside) { $aside.style.top = top + "px"; } if ($asideToggle) { $asideToggle.style.top = top + 26 + "px"; } } }; // 속보 생성시 어사이드 포지션 설정 footerUi.setAsidePosForBreakingNews = function setAsidePosForBreakingNews() { var $aside = document.querySelector("#footer .aside"); var $asideToggle = document.querySelector("#footer .aside-toggle-button"); var $contents = document.querySelector("#contents"); var $iframe = document.querySelector("#contents .iframe-area .inr"); var $headLine = document.querySelector("#contents .main-head-line"); var $headerNav = document.querySelector(".header-nav"); var $viewContentsWrapper = document.querySelector(".view-contents-wrapper"); var $reporterInformationIntroduce = document.querySelector(".reporter-information-introduce"); var left = 0; if ($headerNav) { left = $headerNav.getBoundingClientRect().left; } if ($aside) { $aside.style.left = Math.max(left - 98, 0) + "px"; } if (window.innerWidth <= 1300) { if ($asideToggle) { if ($asideToggle.classList.contains("on")) { $asideToggle.style.left = 47 + "px"; } else { $asideToggle.style.left = 0; } } } if ($iframe) { var top = window.scrollY + $iframe.getBoundingClientRect().top; if ($(".header-nav-wrapper").hasClass("fixed")) { top += 50; } if ($aside) { $aside.style.top = top + "px"; } if ($asideToggle) { $asideToggle.style.top = top + 26 + "px"; } } else if ($headLine) { if ($headLine) { top = window.scrollY + $headLine.getBoundingClientRect().top; } if ($(".header-nav-wrapper").hasClass("fixed")) { top += 50; } if ($aside) { $aside.style.top = top + "px"; } if ($asideToggle) { $asideToggle.style.top = top + 26 + "px"; } } else { if ($contents) { top = window.scrollY + $contents.getBoundingClientRect().top + 24; } if ($(".header-nav-wrapper").hasClass("fixed")) { top += 50; } if ($aside) { $aside.style.top = top + "px"; } if ($asideToggle) { $asideToggle.style.top = top + 26 + "px"; } } }; footerUi.setAsideToggle = function setAsideToggle() { var $aside = document.querySelector("#footer .aside"); var $asideToggle = document.querySelector("#footer .aside-toggle-button"); if ($asideToggle) { $asideToggle.addEventListener("click", function () { if ($aside.classList.contains("hide")) { $aside.classList.remove("hide"); $asideToggle.classList.add("on"); $asideToggle.style.left = 47 + "px"; } else { $aside.classList.add("hide"); $asideToggle.classList.remove("on"); $asideToggle.style.left = 0; } }); } }; /******************************************************* * 공통함수 영역 [e] *******************************************************/ </script> <script type="text/javascript"> if (isMobile() && getParameterByName('mode') != 'pc') { var currentURL = window.location.href; var mobileURL = currentURL.replace('/pc/', '/mobile/'); location.href = mobileURL; } </script> </head> <body> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-M7J7R5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <div id="wrap"> <div id="container" class="container-c2"> <!-- breaking news txt area --> <header id="header"> <div class="before-breaking-news" style="display:none"> </div> <script> var speed = 20 * 1000; // 20초 var lastSokbo; // 이전 속보 $(function () { updateLiveOnAirNews(); setUpdateNews(); }) function setUpdateNews() { setInterval(updateLiveOnAirNews, speed); } function updateLiveOnAirNews() { $.get('/sokbo/sokbo.json?d=' + dayjs().format("YYYYMMDDHHmmss"), function (ret) { setOnAirNewsFlash(ret); // 웹푸시 checkNotification(ret); }); } function setOnAirNewsFlash(liveOnAirNews) { var currentDate = getKoreaTime(); var sortData = null; var data = []; if (liveOnAirNews) { data = liveOnAirNews.slice(); } if (data && data.length) { if (Array.isArray(data)) { sortData = data.sort(function (a, b) { if (dayjs(a.regDate).isBefore(b.regDate)) { return b; } }); sortData = sortData.filter(function (sortItem) { return !dayjs(currentDate).isAfter(new Date(sortItem.endDate)) && sortItem.type === "B"; }); // 최신 속보와 이전 속보가 다를 경우 속보를 다시 띄운다. if (lastSokbo != JSON.stringify(sortData)) { lastSokbo = JSON.stringify(sortData); $('.breaking-news-wrapper').remove(); $('.rolling-breaking-news').remove(); headerUi.setHeaderStickyTriggerPoint(); // header sticky point reset if (sortData.length) { var $div; sortData.sort(function (a, b) { var aFlashEditCode = parseInt(a.flashEditCode); var bFlashEditCode = parseInt(b.flashEditCode); if (aFlashEditCode < bFlashEditCode) { return 1; } if (aFlashEditCode > bFlashEditCode) { return -1; } return 0; }); var htmlContent; if (sortData.length == 1) { htmlContent = '<div class="breaking-news-wrapper">' + '<div class="breaking-news">' + '<div class="news-title">' + '<div class="badge">속보</div>' + '<a class="title" href="" aria-label="속보 기사 링크"></a>' + '</div>' + '<a href="/news/pc/breaking/breaking.html" class="all-link" aria-label="속보 전체 페이지 링크">' + '<span class="txt">속보 및 알림 전체</span>' + '<span class="arrow"></span>' + '</a>' + '</div>' + '</div>'; // jQuery 객체로 변환 var $div = $(htmlContent); var flashEditContents = sortData[0].flashEditContents.replace('\n', ' '); $div.find('.breaking-news a.title').attr('href', sortData[0].url).text(flashEditContents); $('.before-breaking-news').after($div); } else { htmlContent = '<div class="rolling-breaking-news">' + '<div class="breaking-news-wrapper">' + '<div class="breaking-news rolling">' + '<div class="news-title">' + '<div class="badge">속보</div>' + '<div class="breaking-news-swiper swiper">' + '<ul class="swiper-wrapper">' + '<li class="swiper-slide breaking-news-list">' + '<a class="breaking-news-link" aria-label="속보 기사 링크"></a>' + '</li>' + '</ul>' + '</div>' + '</div>' + '<button type="button" class="arrow-btn" aria-label="속보 펼침 버튼"></button>' + '</div>' + '</div>' + '<div class="breaking-news-history-wrapper">' + '<div class="breaking-news-history">' + '<ul class="histories">' + '<li class="history-list">' + '<span class="time"></span>' + '<div class="txt-wrapper">' + '<span class="circle"></span>' + '<a class="txt" aria-label="속보 기사 링크"></a>' + '</div>' + '</li>' + '</ul>' + '<a href="/news/pc/breaking/breaking.html" class="all-link" aria-label="속보 기사 링크">' + '<span class="txt">속보 및 알림 전체</span>' + '<span class="arrow-btn"></span>' + '</a>' + '</div>' + '</div>' + '</div>'; // jQuery 객체로 변환 var $div = $(htmlContent); for (var i = 0; i < sortData.length; i++) { var flashEditContents = sortData[i].flashEditContents.replace('\n', ' '); var $li_slide = $div.find('.breaking-news-wrapper ul li').first().clone(); $li_slide.find('a').html(flashEditContents); if (sortData[i].url) { $li_slide.find('a').attr('href', sortData[i].url); } $div.find('.breaking-news-wrapper ul').append($li_slide); var $li = $div.find('.breaking-news-history-wrapper ul li').first().clone(); $li.find('span.time').text(dayjs(sortData[i].regDate).format("HH:mm")); $li.find('a.txt').text(flashEditContents); if (sortData[i].url) { $li.find('a').attr('href', sortData[i].url); } $div.find('.breaking-news-history-wrapper ul').append($li); } $div.find('.breaking-news-history-wrapper ul li').first().remove(); $div.find('.breaking-news-wrapper ul li').first().remove(); $('.before-breaking-news').after($div); var breakingNewsSwiper = headerUi.breakingNewsRolling(); headerUi.breakingNewsClick(breakingNewsSwiper); } } footerUi.setAsidePosForBreakingNews(); } } } isBreakingNewsLoaded = true; } </script> <style> #header .rolling-breaking-news .breaking-news-history-wrapper .breaking-news-history .histories .history-list .time, #header .rolling-breaking-news .breaking-news-history-wrapper .breaking-news-history .histories .history-list .txt { color: #fff; } </style> <!-- 헤더 탑 메뉴 --> <div class="header-top-menu-wrapper"> <div class="header-top-menu"> <div class="sns-links-menu"> <a href="https://www.kbs.co.kr" class="kbs-link sns-link" target="_blank" title="KBS 사이트" aria-label="KBS 사이트 링크">KBS</a> <a href="https://www.youtube.com/user/NewsKBS" class="youtube-link sns-link" target="_blank" title="KBS 뉴스 유튜브 페이지" aria-label="KBS 뉴스 유튜브 링크"></a> <a href="https://www.facebook.com/kbsnews" class="facebook-link sns-link" target="_blank" title="KBS 뉴스 페이스북 페이지" aria-label="KBS 뉴스 페이스북 링크"></a> <a href="https://www.instagram.com/kbsnews/" class="instagram-link sns-link" target="_blank" title="KBS 뉴스 인스타그램 페이지" aria-label="KBS 뉴스 인스타그램 링크"></a> <a href="https://www.tiktok.com/@kbsnewsofficial" class="tiktok-link sns-link" target="_blank" title="KBS 뉴스 틱톡 페이지" aria-label="KBS 뉴스 틱톡 링크"></a> <!-- <a href="/news/light/main.html?ref=pGnb" class="text-version-link sns-link" target="_blank" title="KBS 뉴스 텍스트 버전 페이지" aria-label="KBS 뉴스 텍스트 버전 링크">텍스트 버전</a>--> </div> <div class="weather-cache-area"> <img src="/resource/image/pc/weather/dark/sun.png" alt="날씨 캐시 이미지" style="height: 0; width: 0;"/> <img src="/resource/image/pc/weather/dark/cloudy-sun.png" alt="날씨 캐시 이미지" style="height: 0; width: 0;"/> <img src="/resource/image/pc/weather/dark/cloudy-sun2.png" alt="날씨 캐시 이미지" style="height: 0; width: 0;"/> <img src="/resource/image/pc/weather/dark/cloudy.png" alt="날씨 캐시 이미지" style="height: 0; width: 0;"/> <img src="/resource/image/pc/weather/dark/fog.png" alt="날씨 캐시 이미지" style="height: 0; width: 0;"/> <img src="/resource/image/pc/weather/dark/smoge.png" alt="날씨 캐시 이미지" style="height: 0; width: 0;"/> <img src="/resource/image/pc/weather/dark/cloud-lightning.png" alt="날씨 캐시 이미지" style="height: 0; width: 0;"/> <img src="/resource/image/pc/weather/dark/cloud-drizzle.png" alt="날씨 캐시 이미지" style="height: 0; width: 0;"/> <img src="/resource/image/pc/weather/dark/cloud-rain.png" alt="날씨 캐시 이미지" style="height: 0; width: 0;"/> <img src="/resource/image/pc/weather/dark/snow.png" alt="날씨 캐시 이미지" style="height: 0; width: 0;"/> </div> <div class="weather-login-menu"> <p class="today"></p> <div class="weather swiper"> <ul class="swiper-wrapper"> <li class="swiper-slide weather-info-list"> <img src="" alt="" class="weather-info-img"/> <p class="weather-info-txt"> <span class="city-name"></span> <span class="temperature"></span> <span class="weather-info"></span> </p> </li> </ul> </div> <a class="login" id="login_id" aria-label="로그인 페이지 링크">로그인</a> <a class="register" id="register_id" aria-label="회원가입 페이지 링크">회원가입</a> <a class="my-page" id="my-page-id" href="//mypage.kbs.co.kr" aria-label="마이페이지 링크">마이페이지</a> <a class="kbs-world" href="/special/english/main.do?bcd=0200">English</a> </div> </div> </div> <!-- 헤더 타이틀 메뉴 --> <div class="header-title-menu-wrapper"> <div class="header-title-menu"> <div class="disaster-portal-link" id="disaster-portal-link"> <span class="siren-icon"></span> <a href="https://d.kbs.co.kr/" class="default-txt" target="_blank" aria-label="재난포털 페이지 링크">재난포털</a> <a href="" class="disaster-message" aria-label="재난포털 페이지 링크"></a> </div> <h1 class="header-logo"> <a href="/news/pc/main/main.html?ref=pLogo" class="header-logo-link" aria-label="KBS 뉴스 메인 링크"></a> </h1> <div class="report-live-menu"> <a href="/news/pc/report/report.html?ref=pGnb" class="report-link" aria-label="제보 페이지 링크">제보</a> <a href="/news/pc/news24/news24.html?ref=pGnb" class="live-link" aria-label="ON AIR 버튼"> <span class="txt">ON AIR</span> <span class="red-dot"></span> </a> </div> </div> </div> <div class="header-nav-wrapper"> <div class="header-nav"> <nav class="nav-menu"> <div class="hamburger-search-btns"> <button type="button" class="hamburger-btn" onclick="hamburgerClick()" aria-label="전체 메뉴 펼침 버튼" ></button> <button type="button" class="search-btn" aria-label="검색 화면 열림 버튼" ></button> </div> <a href="/news/pc/main/main.html?ref=pGnb" class="nav-logo view"></a> <ul class="nav-links"> <li class="nav-list"> <a href="javascript:;" class="nav-link" aria-label="분야별"> 분야별 </a> </li> <li class="nav-list"> <a href="/news/pc/program/program.do?bcd=0001&ref=pGnb" class="nav-link" aria-label="뉴스9 페이지 링크" > 뉴스9 </a> </li> <li class="nav-list"> <a href="javascript:;" class="nav-link" aria-label="TV 뉴스"> TV 뉴스 </a> </li> <li class="nav-list"> <a href="javascript:;" class="nav-link" aria-label="심층취재"> 심층취재 </a> </li> <li class="nav-list"> <a href="/news/pc/sports/sports.html?ref=pGnb" class="nav-link" aria-label="스포츠" > 스포츠 </a> </li> <li class="nav-list"> <a href="javascript:;" class="nav-link" aria-label="시사프로그램"> 시사프로그램 </a> </li> <li class="nav-list"> <a href="javascript:;" class="nav-link" aria-label="지역뉴스"> 지역뉴스 </a> </li> <li class="nav-list"> <a href="/news/pc/breaking/breaking.html?ref=pGnb" class="nav-link" aria-label="속보">속보</a> </li> </ul> <p class="article-title"> 2019 북미정상회담 [16시 뉴스특보] </p> </nav> <ul class="hashtag-links"> <li class="hashtag-list"> <a href="" class="hashtag-link" aria-label="기사 페이지 링크"></a> </li> </ul> </div> <div class="full-menu-wrapper"> <div class="full-menu"> <h2 class="blind">전체메뉴</h2> <div class="common-menu field-menu"> <div class="full-menu-links-wrapper"> <h3>분야별</h3> <div class="full-menu-links-group"> <ul class="full-menu-links"> <li><a href="/news/pc/category/category.do?ref=pSiteMap">전체</a></li> <li><a href="/news/pc/category/category.do?ctcd=0003&ref=pSiteMap">정치</a></li> <li><a href="/news/pc/category/category.do?ctcd=0004&ref=pSiteMap">경제</a></li> <li><a href="/news/pc/category/category.do?ctcd=0005&ref=pSiteMap">사회</a></li> <li><a href="/news/pc/category/category.do?ctcd=0008&ref=pSiteMap">문화</a></li> <li><a href="/news/pc/category/category.do?ctcd=0007&ref=pSiteMap">IT·과학</a></li> <li><a href="/news/pc/category/category.do?ctcd=0006&ref=pSiteMap">국제</a></li> <li><a href="/news/pc/category/category.do?ctcd=0095&ref=pSiteMap">재난·기후·환경</a></li> <li><a href="/news/pc/category/category.do?ctcd=0034&ref=pSiteMap">생활·건강</a></li> <li><a href="/news/pc/sports/sports.html?ref=pSiteMap">스포츠</a></li> <li><a href="/news/pc/enter/enter.html?ref=pSiteMap">연예</a></li> <li><a href="/news/pc/menu/listWeather.do?mcd=0048&ref=pSiteMap">날씨</a></li> <li><a href="/news/pc/issue/issue.html?ref=pSiteMap">이슈</a></li> </ul> </div> </div> </div> <div class="common-menu tv-menu"> <div class="full-menu-links-wrapper"> <h3>TV 뉴스</h3> <div class="full-menu-links-group"> <h4>1TV 뉴스</h4> <ul class="full-menu-links col-2"> <li><a href="/news/pc/program/program.do?bcd=0004&ref=pSiteMap">06:00 뉴스광장 1부</a></li> <li><a href="/news/pc/program/program.do?bcd=0010&ref=pSiteMap">17:00 뉴스 5</a></li> <li><a href="/news/pc/program/program.do?bcd=0003&ref=pSiteMap">07:00 뉴스광장 2부</a></li> <li><a href="/news/pc/program/program.do?bcd=0011&ref=pSiteMap">19:00 뉴스 7</a></li> <li><a href="/news/pc/program/program.do?bcd=0008&ref=pSiteMap">09:30 930뉴스</a></li> <li><a href="/news/pc/program/program.do?bcd=0001&ref=pSiteMap">21:00 뉴스 9</a></li> <li><a href="/news/pc/program/program.do?bcd=0009&ref=pSiteMap">12:00 뉴스 12</a></li> <li><a href="/news/pc/program/program.do?bcd=0012&ref=pSiteMap">22:50 뉴스라인 W</a></li> <li><a href="/news/pc/program/program.do?bcd=0137&ref=pSiteMap">14:00 뉴스 2</a></li> </ul> </div> <div class="full-menu-links-group col-2"> <h4>2TV 뉴스</h4> <ul class="full-menu-links"> <li><a href="/news/pc/program/program.do?bcd=0016&ref=pSiteMap">10:10 아침뉴스타임</a></li> <li><a href="/news/pc/program/program.do?bcd=0049&ref=pSiteMap">15:00 뉴스타임</a></li> <li><a href="/news/pc/program/program.do?bcd=0197&ref=pSiteMap">15:15 월드24</a></li> <li><a href="/news/pc/program/program.do?bcd=0199&ref=pSiteMap">18:00 경제콘서트</a></li> </ul> </div> <div class="full-menu-links-group col-2"> <h4>1TV 경인</h4> <ul class="full-menu-links"> <li><a href="/news/pc/program/program.do?bcd=0060&ref=pSiteMap">뉴스광장(경인)</a></li> <li><a href="/news/pc/program/program.do?bcd=0059&ref=pSiteMap">930뉴스(경인)</a></li> <li><a href="/news/pc/program/program.do?bcd=0051&ref=pSiteMap">뉴스7(경인)</a></li> <li><a href="/news/pc/program/program.do?bcd=0052&ref=pSiteMap">뉴스9(경인)</a></li> </ul> </div> <div class="full-menu-links-group"> <h4><a href="/news/pc/program/program.do?bcd=0042&ref=pSiteMap">뉴스특보</a></h4> </div> </div> </div> <div class="common-menu premiumk-menu"> <div class="full-menu-links-wrapper"> <h3>심층취재</h3> <ul class="full-menu-links col-2"> <li><a href="/news/pc/menu/menu.do?mcd=1127&ref=pSiteMap">심층K</a></li> <li><a href="/news/pc/menu/menu.do?mcd=0713&ref=pSiteMap">단독</a></li> <li><a href="/news/pc/menu/tamsaKList.do?mcd=1016&ref=pSiteMap">탐사K</a></li> <li><a href="/news/pc/menu/menu.do?mcd=1075&ref=pSiteMap">제대로 보겠습니다</a></li> <li><a href="/news/pc/menu/menu.do?mcd=0990&ref=pSiteMap">영상K</a></li> <li><a href="/news/pc/menu/menu.do?mcd=0938&ref=pSiteMap">크랩</a></li> <li><a href="/news/pc/menu/menu.do?mcd=1048&ref=pSiteMap">글로벌K</a></li> <li><a href="/news/pc/menu/menu.do?mcd=1032&ref=pSiteMap">팩트체크K</a></li> <li><a href="/news/pc/menu/menu.do?mcd=1039&ref=pSiteMap">스포츠K</a></li> </ul> <ul class="full-menu-links col-2"> <li><a href="/news/pc/menu/menu.do?mcd=0795&ref=pSiteMap">취재후</a></li> <li><a href="/news/pc/program/program.do?bcd=0023&ref=pSiteMap">News Today</a></li> <li class="w100"><a href="/news/pc/menu/menu.do?mcd=1126&ref=pSiteMap">주말엔</a></li> <li class="w100"><a href="/news/pc/menu/menu.do?mcd=1162&ref=pSiteMap">뒷北뉴스</a></li> <li class="w100"><a href="/special/climatesays/2023/main.html?&ref=pSiteMap">기후는 말한다</a></li> <li class="w100"><a href="/news/pc/menu/menu.do?mcd=1044&ref=pSiteMap">여심야심</a></li> </ul> </div> </div> <div class="common-menu current-affairs-menu"> <div class="full-menu-links-wrapper"> <h3>시사프로그램</h3> <div class="full-menu-links-group"> <h4>시사프로그램</h4> <ul class="full-menu-links"> <li><a href="/news/pc/sisa/sisaChang.do?ref=pSiteMap">시사기획 창</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0029&ref=pSiteMap">일요진단 라이브</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0198&ref=pSiteMap">더 보다</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0031&ref=pSiteMap">남북의 창</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0072&ref=pSiteMap">특파원 보고 세계는 지금</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0071&ref=pSiteMap">재난방송센터</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0073&ref=pSiteMap">사사건건</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0061&ref=pSiteMap">인사이드 경인</a></li> </ul> </div> <div class="full-menu-links-group"> <h4>라디오</h4> <ul class="full-menu-links"> <li><a href="/news/pc/radio/radio.do?mcd=1139&ref=pSiteMap">전격시사</a></li> <li><a href="/news/pc/radio/radio.do?mcd=1125&ref=pSiteMap">성공예감</a></li> <li><a href="/news/pc/radio/radio.do?mcd=1138&ref=pSiteMap">뉴스레터K</a></li> </ul> </div> </div> </div> <div class="common-menu region-menu"> <div class="full-menu-links-wrapper"> <h3>지역뉴스</h3> <div class="full-menu-links-group"> <ul class="full-menu-links col-2"> <li><a href="/news/pc/local/local.do?lscd=10&ref=pSiteMap">부산</a></li> <li><a href="/news/pc/local/local.do?lscd=43&ref=pSiteMap">순천</a></li> <li><a href="/news/pc/local/local.do?lscd=11&ref=pSiteMap">울산</a></li> <li><a href="/news/pc/local/local.do?lscd=50&ref=pSiteMap">전주</a></li> <li><a href="/news/pc/local/local.do?lscd=20&ref=pSiteMap">창원</a></li> <li><a href="/news/pc/local/local.do?lscd=60&ref=pSiteMap">대전</a></li> <li><a href="/news/pc/local/local.do?lscd=21&ref=pSiteMap">진주</a></li> <li><a href="/news/pc/local/local.do?lscd=70&ref=pSiteMap">청주</a></li> <li><a href="/news/pc/local/local.do?lscd=30&ref=pSiteMap">대구</a></li> <li><a href="/news/pc/local/local.do?lscd=71&ref=pSiteMap">충주</a></li> <li><a href="/news/pc/local/local.do?lscd=31&ref=pSiteMap">안동</a></li> <li><a href="/news/pc/local/local.do?lscd=80&ref=pSiteMap">춘천</a></li> <li><a href="/news/pc/local/local.do?lscd=32&ref=pSiteMap">포항</a></li> <li><a href="/news/pc/local/local.do?lscd=81&ref=pSiteMap">강릉</a></li> <li><a href="/news/pc/local/local.do?lscd=40&ref=pSiteMap">광주</a></li> <li><a href="/news/pc/local/local.do?lscd=82&ref=pSiteMap">원주</a></li> <li><a href="/news/pc/local/local.do?lscd=41&ref=pSiteMap">목포</a></li> <li><a href="/news/pc/local/local.do?lscd=90&ref=pSiteMap">제주</a></li> </ul> </div> </div> </div> <div class="common-menu shortcut-menu"> <div class="full-menu-links-wrapper"> <h3>바로가기</h3> <div class="full-menu-links-group"> <ul class="full-menu-links"> <li><a href="//mypage.kbs.co.kr">좋아요 클립</a></li> <li><a href="/news/pc/report/report.html?ref=pSiteMap">제보</a></li> <li><a href="/news/pc/breaking/breaking.html?ref=pSiteMap">속보</a></li> <li><a href="https://d.kbs.co.kr/" target="_blank">재난포털</a></li> <li><a href="/news/pc/news24/news24.html?ref=pSiteMap">ON AIR</a></li> <li><a href="/news/pc/newsArchive/newsArchive.html?ref=pSiteMap">뉴스 아카이브</a></li> </ul> </div> <div class="full-menu-links-group"> <h3><a href="/news/pc/notice/notice.html?ref=pSiteMap">공지·정정</a></h3> </div> </div> </div> </div> </div> <div class="search-most-view"> <div class="search-wrapper"> <div class="search"> <div class="search-box-wrapper"> <p class="search-title">어떤 기사를 찾으시나요?</p> <div class="search-box"> <input type="text" placeholder="원하는 검색어를 입력해주세요" class="search-box-input"/> <button type="button" class="search-btn" aria-label="검색 조회 버튼"></button> <button type="button" class="cancel-btn" style="display: none" aria-label="검색어 초기화 버튼"></button> <ul class="recommend-search"></ul> </div> <script type="text/javascript"> var originalSearchWord = ''; var originalKeyboardOnIndex = -1; $(function () { // 검색어 자동완성 handleSearchKeyword(); }); // 검색 창 function handleSearchKeyword() { var $searchInput = $(".header-nav-wrapper .search-box-wrapper input[type='text']"); var $keywordClear = $(".header-nav-wrapper .search-box-wrapper button.cancel-btn"); $searchInput.on('input ', function (event) { var word = $(this).val().trim(); if (word.length >= 1) { $keywordClear.show(); getKeyword(word); } if (word.length == 0) { $('.recommend-search').removeClass('on'); $keywordClear.hide(); } }); $searchInput.on("keydown", function (event) { var key = event.key || event.keyCode; var KEYCODE = { ENTER: 13, ESC: 27, ARROW_UP: 38, ARROW_DOWN: 40 }; var KEY_RETURN_TIME = 80; if (key == KEYCODE.ARROW_UP || key == "ArrowUp") { event.preventDefault(); setTimeout(function () { var $liList = $('.recommend-search li'); var currentIndex = -1; $liList.each(function (index) { if ($(this).hasClass('on')) { currentIndex = index; return false; // break out of the .each loop } }); if (currentIndex == -1) { $('.recommend-search').removeClass('on'); } else if (currentIndex == 0) { $('input.search-box-input').val(originalSearchWord); $liList.removeClass('on'); $('.recommend-search').removeClass('on'); } else { $liList.removeClass('on'); $('input.search-box-input').val($liList.eq(currentIndex - 1).find('button').val()); $liList.eq(currentIndex - 1).addClass('on'); originalKeyboardOnIndex = currentIndex - 1; } }, KEY_RETURN_TIME); } else if (key == KEYCODE.ARROW_DOWN || key == "ArrowDown") { setTimeout(function () { var $liList = $('.recommend-search li'); var currentIndex = -1; $liList.each(function (index) { if ($(this).hasClass('on')) { currentIndex = index; return false; // break out of the .each loop } }); $liList.removeClass('on'); $('.recommend-search').addClass('on'); if (currentIndex == -1) { $('input.search-box-input').val($liList.eq(0).find('button').val()); $liList.eq(0).addClass('on'); originalKeyboardOnIndex = 0; } else if (currentIndex == $liList.length - 1) { $('input.search-box-input').val($liList.eq(0).find('button').val()); $liList.eq(0).addClass('on'); originalKeyboardOnIndex = 0; } else { $('input.search-box-input').val($liList.eq(currentIndex + 1).find('button').val()); $liList.eq(currentIndex + 1).addClass('on'); originalKeyboardOnIndex = currentIndex + 1; } }, KEY_RETURN_TIME); } else if (key == KEYCODE.ENTER || key == "Enter") { setTimeout(function () { $('.recommend-search').removeClass('on'); moveSearchPage(); }, KEY_RETURN_TIME); } else if (key == KEYCODE.ESC || key == "Escape") { setTimeout(function () { $('.recommend-search').removeClass('on'); }, KEY_RETURN_TIME); } }); // 검색버튼 클릭 $(".search-most-view .search-btn").on("click", function () { moveSearchPage(); }); // 클리어 버튼 클릭 $keywordClear.on("click", function () { $(this).hide(); $('.recommend-search').removeClass('on'); $searchInput.val(""); }); } function getKeyword(word) { originalSearchWord = word; $.get('https://reco.kbs.co.kr/v2/search/autocomplete?target=autocomplete_news&keyword=' + word + '&page=1&page_size=10').done(function (res) { $(".recommend-search li").remove(); if (res.data.length > 0) { displayKeyword(res.data); } }); } function displayKeyword(data) { for (var i = 0; i < data.length; i++) { // <li> 태그 생성 var $li = document.createElement('li'); $li.className = "recommend-search-list"; // <button> 태그 생성 var $button = document.createElement('button'); $button.setAttribute('type', 'button'); $button.setAttribute('value', data[i].keyword_raw); $button.setAttribute('aria-label', "추천어 버튼"); $button.className = 'recommend-word'; var keyword = data[i].keyword; $button.innerHTML = keyword; $li.appendChild($button); $('ul.recommend-search').append($li); } originalKeyboardOnIndex = -1; $('ul.recommend-search').addClass('on'); $('ul.recommend-search li').off('mousedown').on('mousedown', function (e) { var keyword = $(this).find('button').val(); location.href = "/news/pc/search/search.do?query=" + encodeURI(keyword); }) $('ul.recommend-search li').off('mouseenter').on('mouseenter', function (e) { $('ul.recommend-search li').removeClass('on'); $(this).addClass('on'); }) $('ul.recommend-search li').on('mouseleave', function (e) { if ($('ul.recommend-search li:hover').length == 0) { // 모든 <li>에서 마우스가 떠났는지 확인 $('ul.recommend-search li').removeClass('on'); if (originalKeyboardOnIndex != -1) { $('ul.recommend-search li').eq(originalKeyboardOnIndex).addClass('on'); } } }); } function moveSearchPage() { var keyword = $(".search-box-wrapper input[type='text']").val().trim(); if (keyword) { location.href = "/news/pc/search/search.do?query=" + encodeURIComponent(keyword); } else { alert("검색어를 입력해주세요."); } } </script> <style> .recommend-search li { cursor: pointer; } .recommend-search li.on { background-color: #dddddd !important; } .recommend-search li button { width: 100%; text-align: left; } #header .header-nav-wrapper .search-most-view .search-wrapper .search .search-box-wrapper .search-box .recommend-search .recommend-search-list .recommend-word strong { font-weight: 700; } </style> <div class="recommend-keyword"> <div class="title-wrapper"> <p class="title">추천 인기 키워드</p> <p class="desc"> 현재 관심이 높아지고 있는 키워드 입니다. </p> </div> <ul class="keywords"> <li class="keyword-list"> <a href="" class="keyword-link" aria-label="키워드 링크"></a> </li> </ul> </div> </div> <button type="button" class="close-btn" aria-label="검색 화면 닫기 버튼" ></button> </div> </div> <div class="most-view-wrapper"> <div class="most-view"> <p class="most-view-title">많이 본 뉴스</p> <ul class="ranks"> <li class="ranks-list"> <a class="ranks-link" href="" aria-label="많이 본 뉴스 링크"> <div class="thumbnail"> <img src="" alt="" class="thumbnail-img" onerror="javascript:handleError(this);" /> <span></span> <span class="rank-badge">1</span> </div> <p class="title"></p> </a> </li> </ul> </div> </div> </div> <!-- 프로그레스바 --> <div class="progress-bar"></div> </div> <script type="text/javascript"> $(function () { // 많이 본 뉴스 불러오기 getHeaderManyWatchingKbsNews(); getTagData(); getWordCloud(); }); // 검색영역 많이 본 뉴스 function getHeaderManyWatchingKbsNews() { getExposeData(329, getParameterByName('pubExec'), function (data) { if (data.length > 0) { for (var i = 0; i < Math.min(data.length, 6); i++) { var $li = $('.most-view-wrapper ul li').first().clone(); $li.find('a').attr('href', data[i].url); $li.find('.thumbnail span.rank-badge').text(i + 1); $li.find('img').attr('src', data[i].imgUrl).attr('alt', data[i].title); if (data[i].vodUrl) { $li.find('img').next('span').addClass('play-icon'); } $li.find('p.title').text(data[i].title) $('.most-view-wrapper ul').append($li); } $('.most-view-wrapper ul li').first().remove(); } }); } function getTagData() { getExposeData(867, getParameterByName('pubExec'), function (data) { if (data.length > 0) { for (var i = 0; i < data.length; i++) { var $li = $('.header-nav ul.hashtag-links li').first().clone(); // 헤더 태그 html 태그 제거 var tag = (data[i].title).split('<span>').join('').split('</span>').join(''); $li.find('a').text(tag).attr('href', data[i].url); $('.header-nav ul.hashtag-links').append($li); } } $('.header-nav ul.hashtag-links li').first().remove(); }); } function getWordCloud() { var $btn = document.querySelector(".hamburger-search-btns .search-btn"); if ($btn) { $btn.addEventListener("click", function () { $.get('/expose/wordcloud.json', function (data) { var keys = Object.keys(data).map(function (key) { return parseInt(key, 10); }); var latestKey = Math.max.apply(null, keys); var latestData = data[latestKey]; if (latestData !== undefined && latestData !== null) { var sortedKeys = Object.entries(latestData) .sort(function (a, b) { return b[1] - a[1]; }) .map(function (item) { return item[0]; }); for (var i = 0; i < Math.min(sortedKeys.length, 7); i++) { var $li = $('ul.keywords li').first().clone(); $li.find('a').text('# ' + sortedKeys[i]); $li.find('a').attr('href', "/news/pc/search/search.do?query=" + sortedKeys[i]); $('ul.keywords').append($li); } $('ul.keywords li').first().remove(); } }); }, {once:true}); } } function hamburgerClick() { var $btn = document.querySelector(".hamburger-btn"); var $navMenu = document.querySelector(".header-nav"); var $fullMenu = document.querySelector(".full-menu-wrapper"); var $navLinks = document.querySelectorAll(".nav-link"); var $commonMenues = document.querySelectorAll(".common-menu"); var $dim = document.querySelector(".dim"); var $body = document.querySelector("body"); if ($dim) { if ($btn.classList.contains("on")) { $btn.classList.remove("on"); $navMenu.classList.remove("on"); $fullMenu.classList.remove("on"); $dim.classList.remove("on"); $body.classList.remove("hidden"); $navLinks.forEach(function ($navLink) { $navLink.classList.remove("on"); }); $commonMenues.forEach(function ($commonMenu) { $commonMenu.classList.remove("on"); }); } else if (!$btn.classList.contains("on")) { $btn.classList.add("on"); $navMenu.classList.add("on"); $fullMenu.classList.add("on"); $dim.classList.add("on"); $body.classList.add("hidden"); $body.classList.add("on"); } } } </script> <div class="disaster-rolling-wrapper" style="display: none;"> <div class="disaster-rolling"> <div class="swiper disaster-rolling-swiper"> <ul class="swiper-wrapper"> <li class="swiper-slide disaster-rolling-list"> <p class="rolling-message"> </p> </li> </ul> </div> <button type="button" class="arrow-btn" aria-label="재난문자 펼침 버튼"></button> </div> </div> <script type="text/javascript"> $(function () { //867.html script getExposeData(863, getParameterByName('pubExec'), function (data, status) { var list863 = data; if (list863[0].url != "1111") { $(".disaster-rolling-wrapper").css('display', 'none'); isHeaderDisasterLoaded = true; return; } else { $('.disaster-rolling-wrapper').css('display', ''); $('.rolling-message').html(list863[1].contents); var arr = list863[1].contents.split("\n"); for (var i = 0; i < arr.length; i++) { var $li = $('.disaster-rolling-wrapper ul li').first().clone(); $li.find('p').text(arr[i]); if (list863[0].subTitle != null && list863[0].subTitle) { var $span = $("<span class='caution'></span>").text(list863[0].subTitle); $li.find('p').prepend($span); } $('.disaster-rolling-wrapper ul').append($li); } $('.disaster-rolling-wrapper ul li').first().remove(); headerUi.disasterRolling(); isHeaderDisasterLoaded = true; } }, globalErrorHandler); }); </script> <div class="header-notice-wrapper" style="display: none;"> <div class="header-notice"> <p class="notice-title">공지사항</p> <a href="/news/pc/popup/notice.html" target="_blank" class="notice-txt" aria-label="공지사항 링크"></a> </div> </div> <script> $(function () { getExposeData('notice', getParameterByName('pubExec'), function (data) { if (data.noticeTop == 'Y') { $('.header-notice-wrapper').css("display", ''); $('.header-notice-wrapper a.notice-txt').text(data.noticeTitle); } isHeaderNoticeLoaded = true; if (data.noticeBottom == 'Y') { $('.footer-notice-wrapper').css("display", ''); $('.footer-notice-wrapper a').text(data.noticeTitle); } }); }); </script> </header> <script type="text/javascript"> $(function () { setDate(); if (isMobile() && getParameterByName('mode') != 'pc') { var currentURL = window.location.href; var mobileURL = currentURL.replace('/pc/', '/mobile/'); location.href = mobileURL; } var link = document.location.href; var newsURL = "https://news.kbs.co.kr/news/pc/main/main.html"; $('#login_id').prop('href', "https://sso.kbs.co.kr/SSO/KBSWeb/Logon.php?from_url=" + link); $('#register_id').prop('href', "https://sso.kbs.co.kr/SSO2/KBSWeb/member/MemberJoin00SN.php?from_url=" + newsURL); logonCheck(); getAllLocalWeatherInfo(function (data) { if (data.length > 0) { for (var i = 0; i < data.length; i++) { var weather = data[i]; var $li = $('.weather-login-menu .weather ul li').first().clone(); if (weather.icon != '-') { $li.find('img').attr('src', '/resource/image/pc/weather/dark/' + weather.icon + '.png').attr('alt', weather.icon); } $li.find('img').onerror = function () { this.style.display = 'none'; }; $li.find('span.city-name').text(weather.localName); $li.find('span.temperature').text(weather.temperature+'℃'); $li.find('span.weather-info').text(weather.weatherText); $('.weather-login-menu .weather ul').append($li); } $('.weather-login-menu .weather ul li').first().remove(); headerUi.weatherRolling(); } else { $('.weather-login-menu .weather ul').remove(); } }, function (error) { $('.weather-login-menu .weather ul').remove(); }); getDisasterShortText(); getMainAnniversaryDays(); }); function setDate() { const today = dayjs().locale('ko').format('YYYY.MM.DD dddd'); $('.weather-login-menu .today').text(today); } // 숫자가 10 미만이면 앞에 '0'을 붙이는 함수 function padWithZero(num) { if (num < 10) { return '0' + num; } return num.toString(); } function getDisasterShortText() { getExposeData('disasterShortText', getParameterByName('pubExec'), function (data) { var $link = $("#disaster-portal-link"); var $links = $("#disaster-portal-link a"); var $a = $links.last().clone(); $links.last().remove(); if (data.exposeYN === "Y" && data.disasterShortText) { $a.text(data.disasterShortText).attr("href", data.disasterShortTextURL); $a.attr('target', '_blank'); $link.append($a); } else { $link.addClass('single-siren') } }); } function getMainAnniversaryDays() { getExposeData('mainAnniversaryDays', getParameterByName('pubExec'), function (data) { var koreaDate = dayjs(getKoreaTime()).format("YYYYMMDDHHmmss"); for (var i = 0; i < data.length; i++) { if (data[i].startDateTime <= koreaDate && koreaDate <= data[i].endDateTime) { $(".header-logo-link").addClass(data[i].className); break; } } }) } </script> <style> .weather-cache-area { height: 0; } .weather-cache-area img { height: 0; } </style> <main id="contents"> <div class="view-page"> <script type="text/javascript"> // /news/viewLayerRemove.jsp script var newsCode = ''; $(function () { newsCode = getParameterByName('ncd'); displayReplyCount(); displayRecommend(); displayMetaTag(); var autoTagNm = $("#autoPlayNewsVideo").closest(".detail-visual").parent().attr("id"); if (!isEmpty(autoTagNm) && getCookie("vod_play_type_newsvideo") == "auto") { $("#autoPlayNewsVideo").addClass("on"); setTimeout(function () { modPlayNewsVideo(autoTagNm); }, 1000); } setKeyword(); if ('200' == '200') { newsContentsDecorate(); } }); var shareContent = { title: '2019 북미정상회담 [16시 뉴스특보]', newscode: newsCode }; function setCokieForAutoPlayNewsVideo() { var el = $('#autoPlayNewsVideo'); el.toggleClass('on'); if (el.hasClass('on')) { setCookieYear("vod_play_type_newsvideo", "auto"); } else { setCookieYear("vod_play_type_newsvideo", "manual"); } } var printHtml = ""; function getPrintHtml() { return printHtml; } //공감(기사 상단 하트) 추가 function addRecommend(newsCode, recommendGubun) { $.ajax({ url: '/api/auth/recommend/toggleRecommend', type: "POST", dataType: 'json', data: { newsCode: newsCode, recommendGubun: recommendGubun, recommendDevice: 'P' }, success: function (data) { if (data.success == true) { var emotionList = ['', '좋아요', '응원해요', '후속 원해요']; if (data.data == true) { alert("'" + emotionList[+recommendGubun] + "' 처리 하였습니다."); } else { alert("'" + emotionList[+recommendGubun] + "' 처리 취소 하였습니다."); } displayRecommend(1); } } }) } //공감 버튼 처리 function displayRecommend() { // 해당 기사의 공감 기사를 가져온다 var url = '/api/auth/recommend/getRecommendCountByType'; var param = { newsCode: newsCode }; postAjax(url, param, function (result) { if (result && result.success) { var totalCount = result.data.dataByType[1].recommendCount + result.data.dataByType[2].recommendCount + result.data.dataByType[3].recommendCount; if (totalCount >= 1000) { totalCount = '999+' } $('.like-btn .common-btn-txt').text(totalCount); $('.like-btns-list:eq(0) .click-numbers').text(formatNumber(result.data.dataByType[1].recommendCount)); $('.like-btns-list:eq(1) .click-numbers').text(formatNumber(result.data.dataByType[2].recommendCount)); $('.like-btns-list:eq(2) .click-numbers').text(formatNumber(result.data.dataByType[3].recommendCount)); if (result.data.dataByType[1].recommendYn) { $('.like-btns .like-btn').addClass('on'); } else { $('.like-btns .like-btn').removeClass('on'); } if (result.data.dataByType[2].recommendYn) { $('.like-btns .cheer-btn').addClass('on'); } else { $('.like-btns .cheer-btn').removeClass('on'); } if (result.data.dataByType[3].recommendYn) { $('.like-btns .want-btn').addClass('on'); } else { $('.like-btns .want-btn').removeClass('on'); } } }); } // 숫자 comma formatting function formatNumber(number) { return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } //공감 버튼 처리 function displayReplyCount() { // 해당 기사의 댓글 수를 가져온다. var url = application.rootUrlPrefix + '/api/getReplyCount'; var param = { newsCode: newsCode, }; postAjax(url, param, function (result, status) { if (result && result.success == true) { var data = result.data; if (data >= 1000) { data = '999+' $(".comment-btn .common-btn-txt").text(data); } else { $(".comment-btn .common-btn-txt").text((parseInt(isEmptyStr(data, '0')))); } } }); } function replaceAll(content, before, after) { return content.split(before).join(after); } function printSection() { var sw = screen.witdh; var sh = screen.height; var w = 1024; var h = 800; var xpos = (sw - w) / 2; var ypos = (sh - h) / 2; var rptHeader = ""; rptHeader += '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'; rptHeader += '<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko">'; rptHeader += '<head>'; rptHeader += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'; rptHeader += '<title>KBS NEWS</title>'; rptHeader += '<link href="/resources/css/common.css" rel="stylesheet" type="text/css" media="screen, projection, print" />'; rptHeader += '<link href="/resources/css/print.css?v=20250216211214" rel="stylesheet" type="text/css" media="screen, projection, print" />'; rptHeader += '<style>'; rptHeader += ' .det-news .article-summary {position:relative; margin:0 60px 54px 60px; font-size:17px; color:#000; line-height:30px; padding-left:15px; font-family:"Noto Sans Light"}'; rptHeader += ' .det-news .article-summary:before {position:absolute; left:0; top:6px; bottom:5px; width:2px; background: #4d4d4d; content:""; display:block;}'; rptHeader += ' .view_con_text .view_img_wrap img {max-width:640px}'; rptHeader += '</style>'; rptHeader += '<script type="text/javascript" src="/resources/js/jquery-1.7.1.min.js"><\/script>'; rptHeader += '<script type="text/javascript" src="https://openapi.map.naver.com/openapi/v3/maps.js?ncpClientId=udun63q80x"><\/script>'; rptHeader += '</head>'; rptHeader += '<body onLoad="javascript:onPrint();" >'; rptHeader += '<div id="wrapPrint">'; rptHeader += ' <div class="logoArea_print">'; rptHeader += ' <span class="logo"><img src="/resources/images/common/logo.png" alt="KBS NEWS" /></span>'; rptHeader += ' </div>'; var rptContent = $('#mailHtmlContents').clone().css('display', 'block').html(); var rptReport = '<ul class="list-reporter">' + $('#ulReporterList').html() + '</ul>'; var rptScript = ''; rptScript += '<script type="text/javascript">'; rptScript += 'document.domain="kbs.co.kr";'; rptScript += 'function onPrint()'; rptScript += '{'; rptScript += ' window.print();'; rptScript += ' if (window.stop)'; rptScript += ' {'; rptScript += ' location.reload();'; rptScript += ' window.stop(); '; rptScript += ' }'; rptScript += ' window.close(); '; rptScript += '}'; rptScript += '$(function(){ $(".btn_other").remove();});'; rptScript += '<\/script>'; var rptTail = ""; rptTail += ' <div class="copyright">'; rptTail += ' <div class="copy"><img src="/resources/images/common/copyright.gif" alt="저작권자C KBS뉴스(https://news.kbs.co.kr) 무단전재 및 재배포금지" /></div>'; rptTail += ' </div>'; rptTail += '</div>'; rptTail += '</body>'; rptTail += '</html>'; var _rptContent = rptHeader + rptScript + rptContent + rptReport + rptTail; var agent = navigator.userAgent.toLowerCase(); if ((agent.indexOf("msie") != -1)) //IE브라우저 10이하버전 // 11버전은 else 탐 { printHtml = rptContent + rptReport; var rptWin = window.open("/common/printPop.html", "rpt", "width=" + w + ",height=" + h + ",top=" + ypos + ",left=" + xpos + ",status=yes,scrollbars=yes"); } else { var rptWin = window.open("", "rpt", "width=" + w + ",height=" + h + ",top=" + ypos + ",left=" + xpos + ",status=yes,scrollbars=yes"); rptWin.document.open(); rptWin.document.write(_rptContent); rptWin.document.close(); } } function displayMetaTag() { var metaTag = ''; var arrString = []; var listHtml = ""; if (!isEmpty(metaTag)) { arrString = metaTag.split("|"); for (var i = 0; i < arrString.length; i++) { listHtml += '<li><a href="/news/pc/search/search.do?query=' + arrString[i] + '" >#' + arrString[i] + '</a></li>'; } $('#hashList').html(listHtml); } } // ------------------------------------------------ var modArrImg = []; var modBxObj = []; var searchTemp = ''; function fnModSetContentsView(tagNm, tagType, TagKey) { modArrImg.push({"TAG_ID": tagNm, "TAG_LIST": null}); switch (tagType) { case "VIDEO": { modGetVideo(tagNm, TagKey); } break; case "VOD": { modGetVod(tagNm, TagKey); } break; case "NEWSVIDEO": { modGetNewsVideo(tagNm, TagKey); } break; } }; function modGetNewsVideo(tagNm, TagKey) { var tagArr = []; tagArr = TagKey.split("_"); var ncd = tagArr[0]; var mediaSeq = tagArr[1]; var url = application.rootUrlPrefix + '/api/getNewsInfo'; var param = { newsCode: ncd }; postAjax(url, param, function (result, status) { modNewsVideoDisplay(result, tagNm, mediaSeq); }); }; function modNewsVideoDisplay(data, tagNm, mediaSeq) { var listTag = null; var list; if (data && data.data) { list = data.data; } var thumbnailImageUrl = ""; var caption = ""; var srtUrl = ""; var vodCaption = ""; var dutyYN = ""; var vodBlockingYn = ""; var vodTypeArr = []; var vodCheck = false; if (list && list.vods && !isEmpty(list.vods)) { var lowVodUrl = ""; var highVodUrl = ""; for (var i = 0; i < list.vods.length; i++) { var temp = list.vods[i]; if (temp.mediasetSeq == mediaSeq) { vodTypeArr.push(temp.vodType); thumbnailImageUrl = temp.thumbnailImageUrl; caption = temp.caption; srtUrl = temp.subtitleUrl; vodCaption = temp.caption; dutyYN = temp.dutyYn; vodBlockingYn = temp.vodBlockingYn; if (temp.vodType == 'D') lowVodUrl = temp.vodUrl; else if (temp.vodType == 'G') highVodUrl = temp.vodUrl; else if (temp.vodType == 'K') highVodUrl = temp.vodUrl; } } vodTypeArr.sort(); if (lowVodUrl == highVodUrl || highVodUrl == "" || lowVodUrl == "") { vodCheck = true; } } listTag = modGetTagList(tagNm); listTag.TAG_LIST = { 'NEWS_CODE': list && list.newsCode ? list.newsCode : "", 'MEDIASET_SEQ': mediaSeq, 'VOD_TYPE': vodTypeArr, 'IMG_URL': thumbnailImageUrl, 'NEWS_TITLE': list && list.newsTitle ? list.newsTitle : "", 'srtUrl': srtUrl, 'dutyYn': dutyYN, 'vodBlockingYn': vodBlockingYn }; var k = $("#vod_template").clone(); k.removeAttr('id'); k.css('display', 'block'); k.find('.player-wrap .multi_player').attr('id', 'player_' + tagNm); k.find('.player-wrap .multi_player_image').attr('id', 'thumbnail_player_' + tagNm); var playerInitialValue = { newsCode: "4147650", playerId: 'player_' + tagNm, imgUrl: application.rootUrlPrefix + thumbnailImageUrl, lowVodUrl: lowVodUrl, highVodUrl: highVodUrl, caption: caption } $(".view-article #" + tagNm).html(k); var originalWidth = 912; var originalHeight = 513; $('#player_' + tagNm).css("max-height", "0"); // 동영상 관련 하단 설명 $('#player_' + tagNm).closest('.player-wrap').next('.player-caption').text(caption); var $thumbnail = $('#thumbnail_player_' + tagNm); var $img = $thumbnail.find("img"); $img.css("width", originalWidth); $img.css("height", originalHeight); var $playBtn = $thumbnail.find(".play-button"); $img.attr("src", application.rootUrlPrefix + thumbnailImageUrl); $thumbnail.show(); $playBtn.off("click").on("click", function (e) { $thumbnail.hide(); $('#player_' + tagNm).css("max-height", originalHeight); new _KbsPlayer(playerInitialValue); }); }; function modGetTagList(tagNm) { for (var i = 0; i < modArrImg.length; i++) { if (modArrImg[i].TAG_ID == tagNm) { listTag = modArrImg[i]; break; } } return listTag; }; //비디오 function modGetVideo(tagNm, TagKey) { var url = application.rootUrlPrefix + '/api/getNewsInfo'; var param = { newsCode: TagKey, }; postAjax(url, param, function (result, status) { modVideoDisplay(result, tagNm); }); }; function modVideoDisplay(data, tagNm) { var listTag = null; var list = data.data; var length = 0; var imgUrl = ""; if (!isEmpty(list.images)) { imgUrl = list.images[0].imgUrl; } else { imgUrl = application.vodDefaultImage; } var lowVodUrl = ""; var highVodUrl = ""; if (list && list.vods && !isEmpty(list.vods)) { for (var i = 0; i < list.vods.length; i++) { var temp = list.vods[i]; if (temp.vodType == 'D') lowVodUrl = "|N|N|N|" + temp.vodUrl; else if (temp.vodType == 'K') highVodUrl = "|N|N|N|" + temp.vodUrl; } } listTag = modGetTagList(tagNm); listTag.TAG_LIST = { 'NEWS_CODE': list && list.newsCode ? list.newsCode : "", 'LOW_VOD_URL': lowVodUrl, 'HIGH_VOD_URL': highVodUrl, 'IMG_URL': imgUrl, 'NEWS_TITLE': list && list.newsTitle ? list.newsTitle : "" }; var k = $("<div class='section vod'><div class='vod-wrap' tabindex='0' title='동영상플레이어 영역입니다. - ‘Tab’키를 누르시면 동영상 플레이어에 접근합니다.'><span class='blind'>동영상영역 시작</span><div class='view'><img src='' alt='' /><button type='button' class='btn-play' title='동영상 시작' ><span class='blind'>동영상시작</span></button></div><span class='blind'>동영상영역 끝</span></div><em class='desc font-size'><span class='blind'>동영상설명</span></em></div>"); k.find(".view").attr('id', "player_" + tagNm); k.find("img").attr('id', "img_" + tagNm); if (isEmpty(imgUrl)) { k.find("img").attr('src', application.vodDefaultImage); } else { k.find("img").attr('src', application.imagePath + imgUrl); } k.find("img").attr('alt', list.newsTitle); k.find("button").attr('onClick', "modPlayVideo( \'" + tagNm + "\' );"); k.find("em").text(list.newsTitle); $("#cont_newstext #" + tagNm).html(k); var l = $("<div class='view_con_img'><img src='' alt='' style='width:596px;' /></div>"); if (isEmpty(imgUrl)) { l.find("img").attr('src', application.vodDefaultImage); } else { l.find("img").attr('src', application.imagePath + imgUrl); } l.find("img").attr('alt', newsTitle); $("#mailHtmlContents #" + tagNm).html(l); }; function modPlayVideo(tagNm) { var listTag = modGetTagList(tagNm); var list = listTag.TAG_LIST; var vodUrl; var vodQualityType = "" + getCookie("vod_quality_type"); if (vodQualityType == "low") { vodUrl = getKBSHlsVodUrl(list.LOW_VOD_URL); } else { vodUrl = getKBSHlsVodUrl(list.HIGH_VOD_URL); } if (isEmpty(vodUrl)) return; var image = list.IMG_URL; if (list.srtUrl != "" && list.srtUrl != 'undefined' && list.srtUrl != undefined) { var vodParam = { playlist: [{ image: image, file: vodUrl, tracks: [{file: list.srtUrl, "default": "false"}] }], skin: 'kbsvod', autostart: "true", //자동시작 height: 422, width: 750, vodPlayListInfo: [{newscode: list.NEWS_CODE}] }; } else { var vodParam = { playlist: [{ image: image, file: vodUrl }], skin: 'kbsvod', autostart: "true", //자동시작 height: 422, width: 750, vodPlayListInfo: [{newscode: list.NEWS_CODE}] }; } jwPlayerPlayNew(vodParam, 'player_' + tagNm); //동영상 재생 if (list.srtUrl != "" && list.srtUrl != 'undefined' && list.srtUrl != undefined) { setTimeout(function () { $("#player_" + tagNm + " .jw-icon-cc").show(); }, 1000); } }; function modGetVod(tagNm, TagKey) { var listTag = null; var arr_key = TagKey.split("|"); var loopCnt = arr_key.length; if (loopCnt < 3) return false; var vodUrl = ""; var imgUrl = ""; var newsTitle = ""; for (var i = 0; i < loopCnt; i++) { if (i == (loopCnt - 1)) { newsTitle = arr_key[i]; } else if (i == (loopCnt - 2)) { imgUrl = arr_key[i]; } else { if (isEmpty(vodUrl)) { vodUrl = arr_key[i]; } else { vodUrl += "|" + arr_key[i]; } } } if (vodUrl.indexOf('|') == -1) { vodUrl = "|N|N|N|" + vodUrl; } else { vodUrl = "|" + vodUrl; } listTag = modGetTagList(tagNm); listTag.TAG_LIST = {'VOD_URL': vodUrl, 'IMG_URL': imgUrl, 'NEWS_TITLE': newsTitle}; var k = $("<div class='section vod'><div class='vod-wrap' tabindex='0' title='동영상플레이어 영역입니다. - ‘Tab’키를 누르시면 동영상 플레이어에 접근합니다.'><span class='blind'>동영상영역 시작</span><div class='view'><img src='' alt='' /><button type='button' class='btn-play' title='동영상 시작' ><span class='blind'>동영상 시작</span></button></div><span class='blind'>동영상영역 끝</span></div><em class='desc font-size'><span class='blind'>동영상설명</span></em></div>"); k.find(".view").attr('id', "player_" + tagNm); k.find("img").attr('id', "img_" + tagNm); if (isEmpty(imgUrl)) { k.find("img").attr('src', application.vodDefaultImage); } else { k.find("img").attr('src', application.imagePath + imgUrl); } k.find("img").attr('alt', newsTitle); k.find("button").attr('onClick', "modPlayVod( \'" + tagNm + "\' );"); if (imgUrl.indexOf('/data/fckeditor/vod/') > -1) { k.find("em").text(newsTitle); } else { k.find("em").remove(); } $("#cont_newstext #" + tagNm).html(k); var l = $("<div class='view_con_img'><img src='' alt='' style='width:596px;' /></div>"); if (isEmpty(imgUrl)) { l.find("img").attr('src', application.vodDefaultImage); } else { l.find("img").attr('src', application.imagePath + imgUrl); } l.find("img").attr('alt', newsTitle); $("#mailHtmlContents #" + tagNm).html(l); }; function modPlayVod(tagNm) { var listTag = modGetTagList(tagNm); var list = listTag.TAG_LIST; var vodUrl = getKBSHlsVodUrl(list.VOD_URL); if (isEmpty(vodUrl)) return; var image = ""; if (isEmpty(list.IMG_URL)) { image = application.vodDefaultImage; } else { image = list.IMG_URL; } var vodParam = { playlist: [{ image: image, file: vodUrl }], skin: 'kbsvod', autostart: "true", //자동시작 height: 422, width: 750 }; jwPlayerPlayNew(vodParam, 'player_' + tagNm); //동영상 재생 }; function modPlayNewsVideo(tagNm) { var listTag = modGetTagList(tagNm); var list = listTag.TAG_LIST; var vodUrl; if (list.dutyYN == 'Y') { popAlert('I', '저작권 관련 서비스 사용이 불가합니다.'); return; } if (list.vodBlockingYn == 'Y') { var blocking = ''; var url = application.rootUrlPrefix + '/api/getIpInfo'; var param = {}; postAjax(url, param, function (result, status) { if (!isEmpty(result.isAbroadIp)) { blocking = data.isAbroadIp; //해외 IP 확인 } }, function (result, status) { blocking = 'N'; }); if ("N" == blocking) { popAlert('I', '저작권 관련 서비스 사용이 불가합니다.'); return; } } var vodQualityType = "" + getCookie("vod_quality_type"); var lowType = list.VOD_TYPE[0]; var highType = list.VOD_TYPE[list.VOD_TYPE.length - 1]; if (vodQualityType == "low") { vodUrl = getNewsVodOneTimeUrl(list.NEWS_CODE, lowType, list.MEDIASET_SEQ); } else { vodUrl = getNewsVodOneTimeUrl(list.NEWS_CODE, highType, list.MEDIASET_SEQ); } if (isEmpty(vodUrl)) return; var image = list.IMG_URL; if (list.srtUrl != "" && list.srtUrl != 'undefined' && list.srtUrl != undefined) { var vodParam = { playlist: [{ image: image, file: vodUrl, tracks: [{file: list.srtUrl, "default": "false"}] }], skin: 'kbsvod', autostart: "true", //자동시작 height: 422, width: 750, vodPlayListInfo: [{newscode: list.NEWS_CODE}] }; } else { var vodParam = { playlist: [{ image: image, file: vodUrl }], skin: 'kbsvod', autostart: "true", //자동시작 height: 422, width: 750, vodPlayListInfo: [{newscode: list.NEWS_CODE}] }; } jwPlayerPlayNew(vodParam, 'player_' + tagNm); //동영상 재생 if (list.srtUrl != "" && list.srtUrl != 'undefined' && list.srtUrl != undefined) { setTimeout(function () { $("#player_" + tagNm + " .jw-icon-cc").show(); }, 1000); } }; function getNewsVodOneTimeUrl(ncd, vodType, mediaseq) { var url = application.rootUrlPrefix + '/api/getNewsVodOneTimeUrl'; var param = { mediasetSeq: mediaseq, newsCode: ncd, vodType: vodType }; postAjax(url, param, function (result, status) { if (result.success) { streamUrl = data.data.streamUrl; } else { streamUrl = null; alert(result.message); } }, function (result, status) { streamUrl = null; popAlert('E', 'VOD Url 정보를 가지고 오는데 실패하였습니다. >> [' + error + ']'); }); return streamUrl; } function setNextNewsVod() { var url = application.rootUrlPrefix + '/api/getPreNextNews'; var param = { newsCode: newsCode, }; postAjax(url, param, function (result, status) { var prevNextNews = result.data; if (prevNextNews == null || prevNextNews.nextNews == null) { return; } var nextNews = prevNextNews.nextNews; $('#preNewsDiv').show(); $('#nextNewsDiv').show(); $('#nextNewsUrl').attr('href', '/news/view.do?ncd=' + nextNews.newsCode); $('#nextNewsImg').attr('src', nextNews.imgUrl); $('#nextNewsTitle').html(nextNews.newsTitle); }); } function setKeyword() { var keyword = '' if (keyword) { var keywordList = keyword.split('|'); for (var i = 0; i < keywordList.length; i++) { var $li = $('.hashtag-links-wrapper ul li').first().clone(); $li.find('a').html("#" + keywordList[i]).attr('href', "/news/pc/search/search.do?query=" + decodeHtmlEntities(keywordList[i])); $('.hashtag-links-wrapper ul').append($li); } $('.hashtag-links-wrapper ul li').first().remove(); } } function decodeHtmlEntities(input) { var doc = new DOMParser().parseFromString(input, "text/html"); return doc.documentElement.textContent; } function newsContentsDecorate() { function anchorProperties(iconName) { return { section_color: "#4664e6", div_color: "#f7fbff", div_background: "rgb(18 18 55 / 4%)", font_color: "#121237", icon_name: iconName, class: "badge", parentsClass: "anchor-text" }; } function reporterProperties(iconName) { return { section_color: "#db9655", div_color: "#fefcfb", div_background: "rgb(0 128 204 / 4%)", font_color: "#0080CC", icon_name: iconName, class: "badge", parentsClass: "report-text" }; } var section_map = { "[앵커]": anchorProperties("앵커"), "&lt;앵커 멘트&gt;": anchorProperties("앵커"), "[질문]": anchorProperties("질문"), "⊙인터뷰:": anchorProperties("인터뷰"), "[기자]": reporterProperties("기자"), "⊙기자:": reporterProperties("기자"), "[리포트]": reporterProperties("리포트"), "&lt;리포트&gt;": reporterProperties("리포트"), "[답변]": reporterProperties("답변") }; // split var list = [{section: "전체", contents: $("#cont_newstext").html()}]; for (var s in section_map) { list = newsContentsSplitByWord(list, s); } // decorate var decorated_html; if (list[0] && list[0].contents) { decorated_html = list[0].contents; } for (var a = 1; a < list.length; a++) { var obj = list[a]; var map = section_map[obj.section]; decorated_html += '<div class="anchor-report">'; decorated_html += '<div class="' + map.parentsClass + '">'; decorated_html += '<span class="' + map.class + '">' + map.icon_name + '</span>'; decorated_html += '<p class="text">' + obj.contents.replace(/^\s*<br>/, '') + '</p>'; decorated_html += '</div>'; decorated_html += '</div>'; } $("#cont_newstext").html(decorated_html); } function newsContentsSplitByWord(list, word) { var ret = []; for (var a = 0; a < list.length; a++) { var subList = []; if (list[a] && list[a].contents) { subList = list[a].contents.split(word); } for (var b = 0; b < subList.length; b++) { if (b == 0) { ret.push({section: list[a].section, contents: subList[b]}); continue; } ret.push({section: word, contents: subList[b]}); } } return ret; } </script> <div class="view-contents-wrapper"> <div class="view-headline view-box"> <div class="category-issue"> <a class="category-name" href="/news/pc/program/program.do?bcd&#x3D;0042">특보</a> </div> <h4 class="headline-title">2019 북미정상회담 [16시 뉴스특보]</h4> <script>document.title = '2019 북미정상회담 [16시 뉴스특보] | KBS 뉴스';</script> <div class="dates"> <em class="input-date">입력 2019.02.27 (15:55)</em> <em class="edit-date">수정 2019.02.27 (17:22)</em> </div> <div class="tts-summary"> <button type="button" class="summary-btn" style="display:none">요약</button> </div> </div> <script> window.addEventListener("load", function () { if ( typeof SpeechSynthesisUtterance === 'undefined' || typeof window.speechSynthesis === 'undefined' ) { $('.tts-btn').hide(); } else { $('.tts-btn').show(); } }) var message = null; var isPaused = false; var isSpeaking = false; function tts() { if (message && isSpeaking) { if (isPaused) { window.speechSynthesis.resume(); isPaused = false; } else { window.speechSynthesis.pause(); isPaused = true; } return; } if (message && !isSpeaking) { window.speechSynthesis.speak(message); isSpeaking = true; return; } var messageText = ""; var tempDiv = document.createElement("div"); tempDiv.innerHTML = messageText; var strippedText = tempDiv.textContent || tempDiv.innerText; message = new SpeechSynthesisUtterance(); message.text = strippedText; message.onend = function() { isSpeaking = false; $('.tts-btn').removeClass('on'); }; window.speechSynthesis.speak(message); isSpeaking = true; } window.addEventListener('unload', function() { if (window.speechSynthesis) { window.speechSynthesis.cancel(); } }); </script> <div class="view-article view-box"> <!-- Summary --> <!-- jsp와 동일한 hbs를 이용하면 데이터가 랜더링 되지 않아서 #ifb 삭제--> <div class="player-app"> <div class="player-wrap"> <button type="button" class="btn-cancel" onclick="$('.player-app').addClass('close-fix'); $('.player-wrap').addClass('close-fix');"><span class="ico"></span><span class="blind">동영상 고정 취소</span></button> <p class="error-message" style="display: none"></p> <div id="playerElement" tabindex="0"></div> <div id="element-image" style="display: none"> <img class="img" src="" alt="thumbnail" onerror="javascript:handleError(this);"> <button type="button" class="play-button"></button> </div> </div> </div> <script> document.addEventListener("DOMContentLoaded", function () { var playerInitialValue = { newsCode: "", playerId: "playerElement", imgUrl: '/data/news/2019/02/27/4147650_40.jpg' ? application.rootUrlPrefix + '/data/news/2019/02/27/4147650_40.jpg' : application.vodDefaultImage } new KbsPlayer(playerInitialValue); }); </script> <link rel="stylesheet" type="text/css" href="/resource/css/pc/view/kbs-player.css"/> <script> const param4 = getParameterByName('ncd'); const param13 = window.pageEventId; // EventID const logIntervalTime = 30000; var message = ''; var currentUrl = window.location.href; var encodedCurrentUrl = encodeURIComponent(currentUrl); let playbuttonClicked = false; // 동영상 play 버튼 1번 클릭하면 true로 변경 (영어뉴스 자막 세팅 최초 1회만 하기 위함) let isSettingChange = false; // 사용자 버튼 조작으로 자막 설정이 변경되었을 경우 true로 변경 let initialCaptionValue = localStorage.getItem("jwplayer.captionLabel"); // 페이지 진입 시 초기 localStorage jwplayer.captionLabel 값 // 페이지 떠날 때 실행 $(window).on('beforeunload', function () { let jwplayerElements = document.querySelectorAll('.jwplayer'); jwplayerElements.forEach( el => { const playerId = el.id; clearInterval(jwplayer(playerId).$interval); // 모든 interval clear // $state가 'S', 'P', 'M' 일 때만 로그를 보낸다. if (jwplayer(playerId).$state == 'S' || jwplayer(playerId).$state == 'P' || jwplayer(playerId).$state == 'M') { jwplayer(playerId).$state = 'B'; sendVodWatchLog(playerId); } }); /** * 영어뉴스일 경우 사용자 자막 조작이 없었으면 (isSettingChange = false) * localStorage jwplayer.captionLabel 값을 페이지 진입 시 초기 값으로 변경 (initialCaptionValue) */ if ( !isSettingChange && isEngNews() ) { localStorage.setItem("jwplayer.captionLabel", initialCaptionValue); } }); document.addEventListener("DOMContentLoaded", function () { setEngNews(); // 영어뉴스 세팅 }); /** * 대표영상 (기사 내 영상이 1개, #playerElement) * pip mode 지원 */ function KbsPlayer() { var self = this; this.init = function () { this.build(); // jwplayer 객체 생성 // jwplayer 최초 렌더링 this.vodPlayer.on("ready", function () { // vod watch log용 변수 설정 self.vodPlayer.$state = 'Z'; self.vodPlayer.$watchTime = 0; self.vodPlayer.$watchStartTime = dayjs(); self.vodPlayer.$watchEndTime = dayjs(); setTimeout(function () { var duration = parseInt(self.vodPlayer.getDuration()); var dataDuration0 = '01:15:26.00'; var dataDuration1 = '01:15:26.00'; if (dataDuration0 == '' || dataDuration0 == 'null' || dataDuration0.length != 11) { $.getScript(application.rootUrlPrefix + "/api/updateVodLength?vodUrl=/newsmp4/flash/2019/02/27/40.mp4&vodLength=" + duration); } if (dataDuration1 == '' || dataDuration1 == 'null' || dataDuration1.length != 11) { $.getScript(application.rootUrlPrefix + "/api/updateVodLength?vodUrl=/newsmp4/flash/2019/02/27/1500k/40.mp4&vodLength=" + duration); } }, 1000); self.preRenderForwardButton(); // 10초 앞으로 버튼 추가 self.preRenderVolumeValueDisplay(); // 볼륨 조절 시 볼륨 값 표시 영역 세팅 self.preRenderKeyboardControl(); // 키보드 조작 이벤트 self.preRenderKeyControlInfo(); // jwplayer에 키보드 컨트롤 안내창 삽입 self.preRenderFloatingVideo(); // 스크롤 내렸을 때 동영상 띄우기 (pip mode) self.preRenderAutoStart(); // AutoStart 세팅 self.preRenderErrorMessage(); // error message }); } this.build = function () { this.vodParams = self.getVodParams(); // jwplayer 파라미터 가져오기 this.vodPlayer = jwplayer(self.settings.playerId); this.vodPlayer.setup(this.vodParams); // 자동재생 세팅 const isAutoStart = localStorage.getItem('jwplayer-autoStart') == 'true'; const autoStartClass = (isAutoStart) ? 'jw-button-autostart on' : 'jw-button-autostart'; this.vodPlayer.addButton('', '자동재생', this.toggleAutoStart, 'buttonAutocStart', autoStartClass); // 자막 세팅 const captionYn = isEmptyStr("", 'N'); if (captionYn == 'Y') { let captoinClass = (localStorage.getItem("jwplayer.captionLabel") != 'Off') ? 'jw-button-caption on' : 'jw-button-caption'; this.vodPlayer.addButton('', '자막', this.toggleCaption, 'buttonCaption', captoinClass); } this.vodPlayer.on("play", function () { const playerId = self.settings.playerId; $(`#${playerId} .vod-recommed-thumb`).remove(); // 재시작 시 추천동영상 삭제 $(`#${playerId}`).removeClass("jw-state-buffer"); // play 시 buffer 클래스 삭제 $(`#${playerId}`).focus(); // 키보드 조작을 위해 focus clearInterval(jwplayer(playerId).$interval); if(!jwplayer(playerId).$isSeeking) sendVodWatchLog(playerId); jwplayer(playerId).$interval = sendVodWatchLogInterval(playerId); }); // 맨처음 또는 재시작할 때 이벤트, play 이벤트 후 발생 this.vodPlayer.on("firstFrame", function() { // 영어자막 초기설정: playbuttonClicked이 false 일 때만 실행 (play 클릭 시 최초 1회만 실행) // 영어뉴스 일 때는 자막을 항상 켜준다. if( !playbuttonClicked ) { setNewsCaptions(self.vodPlayer); } // play 버튼 클릭 시 true로 바꿔준다. playbuttonClicked = true; }) this.vodPlayer.on("pause", function () { const playerId = self.settings.playerId; clearInterval(jwplayer(playerId).$interval); sendVodWatchLog(playerId); }); this.vodPlayer.on("complete", function () { const playerId = self.settings.playerId; clearInterval(jwplayer(playerId).$interval); sendVodWatchLog(playerId); // 추천동영상 렌더링 getRecommendPlaylist('4147650', res => { displayRecommendPlaylist(res, playerId); }); }); // 재생 바 조작 시 this.vodPlayer.on("seek", function (e) { const playerId = self.settings.playerId; jwplayer(playerId).$seekPosition = e.position; // 현재 재생 위치를 기록 clearInterval(jwplayer(playerId).$interval); let seeking = jwplayer(playerId).$isSeeking; if(seeking === undefined || seeking === false){ jwplayer(playerId).$isSeeking = true; sendVodWatchLog(playerId); } if (!jwplayer(playerId).getConfig().scrubbing) { jwplayer(playerId).$isSeeking = false } // ios safari if( isSafari() ) { setTimeout(() => { if(jwplayer(playerId).getState() == 'playing') { sendVodWatchLog(playerId); } }, 100); } }); // jwplayer 파일 버퍼링일 때 this.vodPlayer.on("buffer", function () { const playerId = self.settings.playerId; $(`#${playerId}`).addClass("jw-state-buffer"); // buffer 클래스 추가 }); } // jwplayer 파라미터 가져오기 this.getVodParams = function () { const isAutoStart = localStorage.getItem('jwplayer-autoStart') == 'true' ? true : false; const setVolume = localStorage.getItem('jwplayer.volume') ? parseInt(localStorage.getItem('jwplayer.volume')) : 50; var result = { playlist: [{ image: self.settings.imgUrl, sources: [], }], // 자막 style captions: { state: true, color: '#FFFFFF', fontFamily: '"Dotum", "돋움", "Gulim", "굴림"', fontSize: 18, backgroundOpacity: 75, edgeStyle: "uniform" }, // 공유하기 sharing: { link: window.location.href, sites: [ { src: shareFacebook, label: "페이스북" }, { src: shareTwitter, label: "트위터" }, { src: shareKakao, label: "카카오톡" }, { src: shareKakaoStory, label: "카카오스토리" }, { src: shareNaverBlog, label: "네이버블로그" }, { src: shareNaverBand, label: "네이버밴드" }, { src: this.embedVideo, // string과 핸들러 함수로도 사용 가능 label: "동영상 퍼가기" } ] }, playbackRateControls: true, // 재생 속도 컨트롤 활성화 playbackRates: [0.5, 0.8, 1, 1.2, 1.5, 1.8, 2, 3], // 재생 속도 설정 enableShortcuts: this.settings.isShortcuts, // 키보드 단축키 비활성화 autostart: isAutoStart, mute: false, volume: setVolume, aspectratio: '16:9', // 화면 비율 설정 (height 설정 무시 -> height가 없어도 됨) width: this.settings.playerWidth, height: this.settings.playerHeight, repeat: false, // 반복 재생 horizontalVolumeSlider: true, // 사운드바 가로로 controls: true, } var captionYn = isEmptyStr("", 'N'); if (captionYn == 'Y') { result.playlist[0].tracks = [{ file: application.rootUrlPrefix + getCaption(), kind: "captions", label: "Korean", default: true }] } if (hiVod) { result.playlist[0].sources.push(this.HD); } if (lowVod) { result.playlist[0].sources.push(this.SD); } return result } // jwplayer에 10초 앞으로 이동 버튼 삽입, 클릭 이벤트 바인딩 this.preRenderForwardButton = function () { const playerId = self.settings.playerId; const HTML = ` <div class="jw-display-icon-container jw-display-icon-forward jw-reset"> <div class="jw-icon jw-icon-forward jw-button-color jw-reset" role="button" tabindex="0" aria-label="10초 빨리감기"></div> </div> `; $(`#${playerId}`).find(".jw-display-controls.jw-reset").append(HTML); const $forwardButton = $(`#${playerId}`).find(".jw-icon-forward"); $forwardButton.on("click", ()=>{ self.moveForward(); }); } // 볼륨 조절 시 볼륨 값 표시 영역 세팅 this.preRenderVolumeValueDisplay = function () { const playerId = self.settings.playerId; const HTML = `<div class="jw-animation ani-volume" style="display: none"></div>`; $(`#${playerId}`).append(HTML); } // 키보드 조작 이벤트 this.preRenderKeyboardControl = function() { document.getElementById(self.settings.playerId).addEventListener('keydown', function (e) { const playerId = self.settings.playerId; const state = jwplayer(playerId).getState(); if (e.keyCode == 37) { // ← self.moveBackward(); e.preventDefault(); } else if (e.keyCode == 39) { // → e.preventDefault(); if (state != 'complete') { self.moveForward(); } } else if (e.keyCode == 38) { // ↑ self.soundUp(); e.preventDefault(); } else if (e.keyCode == 40) { // ↓ self.soundDown(); e.preventDefault(); } else if (e.keyCode == 32) { // spaceBar self.pause(); e.preventDefault(); } else if (e.keyCode == 70) { // f self.fullscreen(); e.preventDefault(); } else if (e.keyCode == 77) { // m self.mute(); e.preventDefault(); } }); } // jwplayer에 키보드 컨트롤 안내창 삽입 this.preRenderKeyControlInfo = function () { const playerId = self.settings.playerId; const HTML = ` <div class="keyinfo-wrap" style="z-index: 100;"> <button type="button" class="button-keyinfo" title="키보드 컨트롤 안내">i</button> <div class="keyinfo-box" style="display: none"> <p> 센스리더 사용자는 가상커서를 해제한 후<br>동영상플레이어 단축키를 이용하세요.<br> (가상커서 해제 단축키 : 컨트롤 + 쉬프트 + F12) </p> <p> 좌 / 우 방향키는 시간이 - 10 / +10로 이동되며,<br> 상 / 하 방향키는 음량이 + 5 / -5로 조절됩니다.<br> 스페이스 바를 누르시면 영상이 재생 / 중단 됩니다. </p> <button type="button" class="close-keyinfo" title="키보드 컨트롤 안내 닫기"></button> </div> </div> `; $(`#${playerId}`).after(HTML); const $playerWrap = $(`#${playerId}`).parents('.player-wrap'); const $openKeyinfoButton = $playerWrap.find('.button-keyinfo'); const $closeKeyinfoButton = $playerWrap.find('.close-keyinfo'); const $keyinfoBox = $playerWrap.find(".keyinfo-box"); $openKeyinfoButton.on("click", () => $keyinfoBox.toggle()); $closeKeyinfoButton.on("click", () => $keyinfoBox.hide()); } // 스크롤 내렸을 때 동영상 띄우기 (pip mode) this.preRenderFloatingVideo = function() { var videoElements = document.querySelectorAll('video'); videoElements.forEach( video => video.setAttribute('disablePictureInPicture', 'true') ); var onScrollHandler = function () { if ( scrollY > 900 ) { $('.player-wrap').addClass('fix'); $('.player-app').addClass('fix'); } else { $('.player-wrap').removeClass('fix'); $('.player-app').removeClass('fix'); } }; self.vodPlayer.on("play", () => { $(window).on("scroll", onScrollHandler); }); } // AutoStart 세팅 (autoStart가 아닐 때 섬네일 이미지 세팅) this.preRenderAutoStart = function() { const isAutoStart = localStorage.getItem('jwplayer-autoStart') == 'true'; if (isAutoStart) return; var $thumbnail = $("#element-image"); var $img = $thumbnail.find("img"); var $playBtn = $thumbnail.find(".play-button"); $img.attr("src", application.rootUrlPrefix + "/data/news/2019/02/27/4147650_40.jpg"); $thumbnail.show(); $playBtn.off("click").on("click", function (e) { $thumbnail.hide(); self.vodPlayer.play(); }); } // preRenderErrorMessage (확인필요) this.preRenderErrorMessage = function() { if (this.vodPlayer.getPlaylist()[0].sources.length == 0) { var errMsg = $(".error-message"); errMsg.css("display", ""); errMsg.text(message); } } // 영상 재생 10초 뒤로 this.moveBackward = function () { this.moveSeek(-10) } // 영상 재생 10초 앞으로 this.moveForward = function () { this.moveSeek(10); } // 사운드 5포인트 크게 this.soundUp = function () { const playerId = self.settings.playerId; const volume = parseInt(self.vodPlayer.getVolume()); this.moveVolume(5); $(`#${playerId}`).find(".jw-animation.ani-volume").text(`${volume}%`); $(`#${playerId}`).find(".jw-animation.ani-volume").stop(true, true).fadeIn().delay(300).fadeOut(); } // 사운드 5포인트 작게 this.soundDown = function () { const playerId = self.settings.playerId; const volume = parseInt(self.vodPlayer.getVolume()); this.moveVolume(-5); $(`#${playerId}`).find(".jw-animation.ani-volume").text(`${volume}%`); $(`#${playerId}`).find(".jw-animation.ani-volume").stop(true, true).fadeIn().delay(300).fadeOut(); } // 재생 영상 앞으로 뒤로 이동시킴 this.moveSeek = function (sec) { var moveTo = this.vodPlayer.getPosition() + sec; if (moveTo < 0) { moveTo = 0 } else if (moveTo > this.vodPlayer.getDuration()) { moveTo = this.vodPlayer.getDuration() } this.vodPlayer.seek(moveTo) } // 사운드 볼륨을 크게 작게 함 this.moveVolume = function (percent) { var volume = this.vodPlayer.getVolume() + percent if (volume < 0) { volume = 0 } else if (volume > 100) { volume = 100 } this.vodPlayer.setVolume(volume) } // 영상 일시 정지하거나 다시 재생시킴 this.pause = function () { const state = this.vodPlayer.getState(); if (state == 'playing') { this.vodPlayer.pause() } else if (state == 'paused' || state == 'complete') { this.vodPlayer.play() } } // 영상 풀스크린으로 보이게 this.fullscreen = function () { if (this.vodPlayer.getFullscreen()) { this.vodPlayer.setFullscreen(false) } else { this.vodPlayer.setFullscreen(true) } } // 음소거 this.mute = function () { if (jwplayer().getMute()) { jwplayer().setMute(false); } else { jwplayer().setMute(true); } } // 자막 보이게 안 보이게 토글 기능 this.toggleCaption = function () { if( self.vodPlayer.getCurrentCaptions() == 0 ) { setCaptionsOn(self.vodPlayer); } else { setCaptionsOff(self.vodPlayer); } } // 영상 자동 재생 토글 toggleAutoStart this.toggleAutoStart = function () { self.settings.isAutoPlay = !self.settings.isAutoPlay; var $autoPlay = $(".jw-button-autostart"); $autoPlay.toggleClass('on'); if ($autoPlay.hasClass('on')) { localStorage.setItem('jwplayer-autoStart', 'true'); } else { localStorage.setItem('jwplayer-autoStart', 'false'); } } // 동영상 퍼가기 this.embedVideo = function () { var vod = ''; if (hiVod) { vod = hiVod; } else { vod = lowVod; } var embedVideoUrl = application.rootUrlPrefix + '/news/pc/view/embedVideo.do?vodUrl=' + vod + '&imgUrl=' + self.settings.imgUrl + '&captionYn=' + captionYn; var embedUrl = '&lt;iframe width="100%" height="100%" src="' + embedVideoUrl + '" ' + 'title="video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; ' + 'encrypted-media; gyroscope; web-share" allowfullscreen&gt;&lt;/iframe&gt;'; $('.video-embed-popup .embed-text').html(embedUrl); $('.video-embed-popup').addClass("on"); $('.dim').addClass("on"); $('.body').addClass("on"); $('.header-nav-wrapper').addClass("index-change"); } var defaults = { playerWidth: 912, playerHeight: 513, isShortcuts: false, isAutoPlay: false, isCaption: true, vodPlayType: "vod_play_type", mediaFile: [], }; // jwplayer 기본 설정값 // 함수 arguments와 defaults 값을 가져와 settings에 기본 설정함 this.settings = (arguments[0] && typeof arguments[0] == "object") ? extendDefaults(defaults, arguments[0]) : defaults; var lowVod = "/newsmp4/flash/2019/02/27/40.mp4"; var hiVod = "/newsmp4/flash/2019/02/27/1500k/40.mp4"; var captionYn = isEmptyStr("", 'N'); if (lowVod && lowVod != hiVod) { var cdnYn = 'N', duty = 'N', blockingYn = 'N'; if (lowVod.indexOf('|') == 0) { var vodInfos = lowVod.split('|'); duty = vodInfos[1]; cdnYn = vodInfos[2]; blockingYn = vodInfos[3]; lowVod = vodInfos[4]; } cdnYn = 'Y'; //무조건 cdn으로 실행 if (duty.indexOf('^') >= 0) { var dutyInfos = duty.split('^'); dutyYn = dutyInfos[0]; if (dutyYn == 'Y') { duty_code = dutyInfos[1]; if (duty_code) { var dutyMsg = ''; $.ajax({ url: application.rootUrlPrefix + '/news/getVodDutyCodeMsg.do', type: "POST", async: false, dataType: 'json', data: { dutyCode: duty_code }, success: function (data, status) { if (data.dutyMsg && data.dutyMsg.resultcode == 1) { dutyMsg = data.dutyMsg.duty_msg; } else { dutyMsg = '저작권 관련 서비스 사용이 불가합니다.'; } }, error: function (request, status, error) { dutyMsg = '저작권 관련 서비스 사용이 불가합니다.'; } }); message = dutyMsg; return null; } } } else { dutyYn = duty; } if (dutyYn == 'Y') { message = '저작권 관련 서비스 사용이 불가합니다.'; return null; } if ("Y" == blockingYn) { var blocking = ''; $.ajax({ url: application.rootUrlPrefix + '/api/getIpInfo', type: "POST", async: false, dataType: 'json', success: function (data, status) { if (data.isAbroadIp) { blocking = data.isAbroadIp; //해외 IP 확인 } }, error: function (request, status, error) { blocking = 'N'; } }); if ("N" == blocking) { message = '저작권 관련 서비스 사용이 불가합니다.'; return; } } // VOD URL 조회 if (!lowVod) { message = 'VOD URL 정보가 없습니다.'; return null; } if (lowVod.indexOf("/") == 0) { lowVod = lowVod.substr(1); } var lowVodUrl = ""; var hiVodUrl = ""; $.ajax({ url: application.rootUrlPrefix + '/api/getHlsNewsVodUrl', type: "POST", dataType: 'json', data: { vodUrl: lowVod }, success: function (data, status) { if (data && data.success) { lowVodUrl = data.data.streamUrl; $.ajax({ url: application.rootUrlPrefix + '/api/getHlsNewsVodUrl', type: "POST", dataType: 'json', data: { vodUrl: hiVod }, success: function (data, status) { if (data && data.success) { hiVodUrl = data.data.streamUrl; self.SD = { file: lowVodUrl, label: '표준화질' } self.HD = { file: hiVodUrl, label: '고화질' } self.init(); } else { hiVodUrl = null; if (data && data.message) { message = data.message; } else { message = 'VOD Url 정보를 가지고 오는데 실패하였습니다.'; } self.init(); } }, error: function (request, status, error) { hiVodUrl = null; message = 'VOD Url 정보를 가지고 오는데 실패하였습니다. >> [' + error + ']'; self.init(); } }); } else { lowVodUrl = null; if (data && data.message) { message = data.message; } else { message = 'VOD Url 정보를 가지고 오는데 실패하였습니다.'; } const playerId = self.settings.playerId; displayErrorMessage(playerId, message); self.init(); } }, error: function (request, status, error) { lowVodUrl = null; message = 'VOD Url 정보를 가지고 오는데 실패하였습니다. >> [' + error + ']'; self.init(); } }); } else if (lowVod) { var cdnYn = 'N', duty = 'N', blockingYn = 'N'; if (lowVod.indexOf('|') == 0) { var vodInfos = lowVod.split('|'); duty = vodInfos[1]; cdnYn = vodInfos[2]; blockingYn = vodInfos[3]; lowVod = vodInfos[4]; } cdnYn = 'Y'; //무조건 cdn으로 실행 if (duty.indexOf('^') >= 0) { var dutyInfos = duty.split('^'); dutyYn = dutyInfos[0]; if (dutyYn == 'Y') { duty_code = dutyInfos[1]; if (duty_code) { var dutyMsg = ''; $.ajax({ url: application.rootUrlPrefix + '/news/getVodDutyCodeMsg.do', type: "POST", async: false, dataType: 'json', data: { dutyCode: duty_code }, success: function (data, status) { if (data.dutyMsg && data.dutyMsg.resultcode == 1) { dutyMsg = data.dutyMsg.duty_msg; } else { dutyMsg = '저작권 관련 서비스 사용이 불가합니다.'; } }, error: function (request, status, error) { dutyMsg = '저작권 관련 서비스 사용이 불가합니다.'; } }); message = dutyMsg; return null; } } } else { dutyYn = duty; } if (dutyYn == 'Y') { message = '저작권 관련 서비스 사용이 불가합니다.'; return null; } if ("Y" == blockingYn) { var blocking = ''; $.ajax({ url: application.rootUrlPrefix + '/api/getIpInfo', type: "POST", async: false, dataType: 'json', success: function (data, status) { if (data.isAbroadIp) { blocking = data.isAbroadIp; //해외 IP 확인 } }, error: function (request, status, error) { blocking = 'N'; } }); if ("N" == blocking) { message = '저작권 관련 서비스 사용이 불가합니다.'; return; } } // VOD URL 조회 if (!lowVod) { message = 'VOD URL 정보가 없습니다.'; return null; } if (lowVod.indexOf("/") == 0) { lowVod = lowVod.substr(1); } var lowVodUrl = ""; var hiVodUrl = ""; $.ajax({ url: application.rootUrlPrefix + '/api/getHlsNewsVodUrl', type: "POST", dataType: 'json', data: { vodUrl: lowVod }, success: function (data, status) { if (data && data.success) { lowVodUrl = data.data.streamUrl; self.SD = { file: lowVodUrl, label: '표준화질' } self.init(); } else { lowVodUrl = null; if (data && data.message) { message = data.message; } else { message = 'VOD Url 정보를 가지고 오는데 실패하였습니다.'; } self.init(); } }, error: function (request, status, error) { lowVodUrl = null; message = 'VOD Url 정보를 가지고 오는데 실패하였습니다. >> [' + error + ']'; self.init(); } }); } } /** * 자체영상 (기사 내 영상 여러개, #contentsTag_0, #contentsTag_1 ...) * pip mode 미지원 * fnModSetContentsView 함수에서 tagType(VIDEO, VOD, NEWSVIDEO)에 따라 분류되어 NEWSVIDEO 일 때만 실행 됨 */ function _KbsPlayer() { // _KbsPlayer() 에서는 이 부분이 위에 있어야 함 var defaults = { playerWidth: 912, playerHeight: 513, isShortcuts: false, isAutoPlay: false, isCaption: true, vodPlayType: "vod_play_type", mediaFile: [], lowVodUrl: '', highVodUrl: '' }; // jwplayer 기본 설정값 // 함수 arguments와 defaults 값을 가져와 settings에 기본 설정함 this.settings = (arguments[0] && typeof arguments[0] == "object") ? extendDefaults(defaults, arguments[0]) : defaults; if (this.settings.lowVodUrl) { var _lowVodUrl = getKBSHlsVodUrl(this.settings.lowVodUrl); this.SD = { file: _lowVodUrl, label: '표준화질' } } if (this.settings.lowVodUrl != this.settings.highVodUrl) { if (this.settings.highVodUrl) { var _highVodUrl = getKBSHlsVodUrl(this.settings.highVodUrl); this.HD = { file: _highVodUrl, label: '고화질' } } } var self = this; this.init = function () { this.build(); // jwplayer 객체 생성 // jwplayer 최초 렌더링 this.vodPlayer.on("ready", function () { // vod watch log용 변수 설정 self.vodPlayer.$state = 'Z'; self.vodPlayer.$watchTime = 0; self.vodPlayer.$watchStartTime = dayjs(); self.vodPlayer.$watchEndTime = dayjs(); self.preRenderForwardButton(); // 10초 앞으로 버튼 추가 self.preRenderVolumeValueDisplay(); // 볼륨 조절 시 볼륨 값 표시 영역 세팅 self.preRenderKeyboardControl(); // 키보드 조작 이벤트 self.preRenderKeyControlInfo(); // jwplayer에 키보드 컨트롤 안내창 삽입 // 자체 영상에서 세팅 X: 스크롤 내렸을 때 동영상 띄우기 (pip mode) // 자체 영상에서 세팅 X: AutoStart self.preRenderErrorMessage(); // error message (확인필요) }); } this.build = function () { this.vodParams = self.getVodParams(); this.vodPlayer = jwplayer(self.settings.playerId); this.vodPlayer.setup(this.vodParams); // 자동재생 세팅 (_KbsPlayer()에선 자동재생 세팅 안함) // 자막 세팅 var captionYn = isEmptyStr("", 'N'); if (captionYn == 'Y') { let captoinClass = (localStorage.getItem("jwplayer.captionLabel") != 'Off') ? 'jw-button-caption on' : 'jw-button-caption'; this.vodPlayer.addButton('', '자막', this.toggleCaption, 'buttonCaption', captoinClass); } this.vodPlayer.on("play", function () { const playerId = self.settings.playerId; $(`#${playerId} .vod-recommed-thumb`).remove(); // 재시작 시 추천동영상 삭제 $(`#${playerId}`).removeClass("jw-state-buffer"); // play 시 buffer 클래스 삭제 $(`#${playerId}`).focus(); // 키보드 조작을 위해 focus clearInterval(jwplayer(playerId).$interval); if(!jwplayer(playerId).$isSeeking) sendVodWatchLog(playerId); jwplayer(playerId).$interval = sendVodWatchLogInterval(playerId); }); // 맨처음 또는 재시작할 때 이벤트, play 이벤트 후 발생 this.vodPlayer.on("firstFrame", function() { // 영어자막 초기설정: playbuttonClicked이 false 일 때만 실행 (play 클릭 시 최초 1회만 실행) // 영어뉴스 일 때는 자막을 항상 켜준다. if( !playbuttonClicked ) { setNewsCaptions(self.vodPlayer); } // play 버튼 클릭 시 true로 바꿔준다. playbuttonClicked = true; }) this.vodPlayer.on("pause", function () { const playerId = self.settings.playerId; clearInterval(jwplayer(playerId).$interval); sendVodWatchLog(playerId); }); this.vodPlayer.on("complete", function () { const playerId = self.settings.playerId; clearInterval(jwplayer(playerId).$interval); sendVodWatchLog(playerId); // 추천동영상 렌더링 getRecommendPlaylist('4147650', res => { displayRecommendPlaylist(res, playerId); }); }); // 재생 바 조작 시 this.vodPlayer.on("seek", function (e) { const playerId = self.settings.playerId; jwplayer(playerId).$seekPosition = e.position; // 현재 재생 위치를 기록 clearInterval(jwplayer(playerId).$interval); let seeking = jwplayer(playerId).$isSeeking; if(seeking === undefined || seeking === false){ jwplayer(playerId).$isSeeking = true; sendVodWatchLog(playerId); } if (!jwplayer(playerId).getConfig().scrubbing) { jwplayer(playerId).$isSeeking = false } // ios safari if( isSafari() ) { setTimeout(() => { if(jwplayer(playerId).getState() == 'playing') { sendVodWatchLog(playerId); } }, 100); } }); // jwplayer 파일 버퍼링일 때 this.vodPlayer.on("buffer", function () { const playerId = self.settings.playerId; $(`#${playerId}`).addClass("jw-state-buffer"); // buffer 클래스 추가 }); } // jwplayer 파라미터 가져오기 this.getVodParams = function () { const isAutoStart = false; // 자체영상에서는 무조건 false const setVolume = localStorage.getItem('jwplayer.volume') ? parseInt(localStorage.getItem('jwplayer.volume')) : 50; var result = { playlist: [{ image: self.settings.imgUrl, sources: [], }], // 자막 style captions: { state: true, color: '#FFFFFF', fontFamily: '"Dotum", "돋움", "Gulim", "굴림"', fontSize: 18, backgroundOpacity: 75, edgeStyle: "uniform" }, // 공유하기 sharing: { link: window.location.href, sites: [ { src: shareFacebook, label: "페이스북" }, { src: shareTwitter, label: "트위터" }, { src: shareKakao, label: "카카오톡" }, { src: shareKakaoStory, label: "카카오스토리" }, { src: shareNaverBlog, label: "네이버블로그" }, { src: shareNaverBand, label: "네이버밴드" }, { src: this.embedVideo, // string과 핸들러 함수로도 사용 가능 label: "동영상 퍼가기" } ] }, playbackRateControls: true, // 재생 속도 컨트롤 활성화 playbackRates: [0.5, 0.8, 1, 1.2, 1.5, 1.8, 2, 3], // 재생 속도 설정 enableShortcuts: this.settings.isShortcuts, // 키보드 단축키 비활성화 autostart: isAutoStart, mute: false, volume: setVolume, aspectratio: '16:9', // 화면 비율 설정 (height 설정 무시 -> height가 없어도 됨) width: this.settings.playerWidth, height: this.settings.playerHeight, repeat: false, // 반복 재생 horizontalVolumeSlider: true, // 사운드바 가로로 controls: true, } var captionYn = isEmptyStr("", 'N'); if (captionYn == 'Y') { result.playlist[0].tracks = [{ file: application.rootUrlPrefix + getCaption(), kind: "captions", label: "Korean", default: true }] } if (this.settings.highVodUrl) { result.playlist[0].sources.push(this.HD); } if (this.settings.lowVodUrl) { result.playlist[0].sources.push(this.SD); } return result } // jwplayer에 10초 앞으로 이동 버튼 삽입, 클릭 이벤트 바인딩 this.preRenderForwardButton = function () { const playerId = self.settings.playerId; const HTML = ` <div class="jw-display-icon-container jw-display-icon-forward jw-reset"> <div class="jw-icon jw-icon-forward jw-button-color jw-reset" role="button" tabindex="0" aria-label="10초 빨리감기"></div> </div> `; $(`#${playerId}`).find(".jw-display-controls.jw-reset").append(HTML); const $forwardButton = $(`#${playerId}`).find(".jw-icon-forward"); $forwardButton.on("click", ()=>{ self.moveForward(); }); } // 볼륨 조절 시 볼륨 값 표시 영역 세팅 this.preRenderVolumeValueDisplay = function () { const playerId = self.settings.playerId; const HTML = `<div class="jw-animation ani-volume" style="display: none"></div>`; $(`#${playerId}`).append(HTML); } // 키보드 조작 이벤트 this.preRenderKeyboardControl = function() { document.getElementById(self.settings.playerId).addEventListener('keydown', function (e) { const playerId = self.settings.playerId; const state = jwplayer(playerId).getState(); if (e.keyCode == 37) { // ← self.moveBackward(); e.preventDefault(); } else if (e.keyCode == 39) { // → e.preventDefault(); if (state != 'complete') { self.moveForward(); } } else if (e.keyCode == 38) { // ↑ self.soundUp(); e.preventDefault(); } else if (e.keyCode == 40) { // ↓ self.soundDown(); e.preventDefault(); } else if (e.keyCode == 32) { // spaceBar self.pause(); e.preventDefault(); } else if (e.keyCode == 70) { // f self.fullscreen(); e.preventDefault(); } else if (e.keyCode == 77) { // m self.mute(); e.preventDefault(); } }); } // jwplayer에 키보드 컨트롤 안내창 삽입 this.preRenderKeyControlInfo = function () { const playerId = self.settings.playerId; const HTML = ` <div class="keyinfo-wrap" style="z-index: 100;"> <button type="button" class="button-keyinfo" title="키보드 컨트롤 안내">i</button> <div class="keyinfo-box" style="display: none"> <p> 센스리더 사용자는 가상커서를 해제한 후<br>동영상플레이어 단축키를 이용하세요.<br> (가상커서 해제 단축키 : 컨트롤 + 쉬프트 + F12) </p> <p> 좌 / 우 방향키는 시간이 - 10 / +10로 이동되며,<br> 상 / 하 방향키는 음량이 + 5 / -5로 조절됩니다.<br> 스페이스 바를 누르시면 영상이 재생 / 중단 됩니다. </p> <button type="button" class="close-keyinfo" title="키보드 컨트롤 안내 닫기"></button> </div> </div> `; $(`#${playerId}`).after(HTML); const $playerWrap = $(`#${playerId}`).parents('.player-wrap'); const $openKeyinfoButton = $playerWrap.find('.button-keyinfo'); const $closeKeyinfoButton = $playerWrap.find('.close-keyinfo'); const $keyinfoBox = $playerWrap.find(".keyinfo-box"); $openKeyinfoButton.on("click", () => $keyinfoBox.toggle()); $closeKeyinfoButton.on("click", () => $keyinfoBox.hide()); } // preRenderErrorMessage (자체 영상에서는 세팅 X) (확인필요) this.preRenderErrorMessage = function() { if (this.vodPlayer.getPlaylist()[0].sources.length == 0) { var errMsg = $(`#${self.settings.playerId}`).find(".error-message"); errMsg.css("display", ""); errMsg.text(message); } } // 영상 재생 10초 뒤로 this.moveBackward = function () { this.moveSeek(-10) } // 영상 재생 10초 앞으로 this.moveForward = function () { this.moveSeek(10); } // 사운드 5포인트 크게 this.soundUp = function () { const playerId = self.settings.playerId; const volume = parseInt(self.vodPlayer.getVolume()); this.moveVolume(5); $(`#${playerId}`).find(".jw-animation.ani-volume").text(`${volume}%`); $(`#${playerId}`).find(".jw-animation.ani-volume").stop(true, true).fadeIn().delay(300).fadeOut(); } // 사운드 5포인트 작게 this.soundDown = function () { const playerId = self.settings.playerId; const volume = parseInt(self.vodPlayer.getVolume()); this.moveVolume(-5); $(`#${playerId}`).find(".jw-animation.ani-volume").text(`${volume}%`); $(`#${playerId}`).find(".jw-animation.ani-volume").stop(true, true).fadeIn().delay(300).fadeOut(); } // 재생 영상 앞으로 뒤로 이동시킴 this.moveSeek = function (sec) { var moveTo = this.vodPlayer.getPosition() + sec if (moveTo < 0) { moveTo = 0 } else if (moveTo > this.vodPlayer.getDuration()) { moveTo = this.vodPlayer.getDuration() } this.vodPlayer.seek(moveTo) } // 사운드 볼륨을 크게 작게 함 this.moveVolume = function (percent) { var volume = this.vodPlayer.getVolume() + percent if (volume < 0) { volume = 0 } else if (volume > 100) { volume = 100 } this.vodPlayer.setVolume(volume) } // 영상 일시 정지하거나 다시 재생시킴 this.pause = function () { const state = this.vodPlayer.getState(); if (state == 'playing') { this.vodPlayer.pause() } else if (state == 'paused' || state == 'complete') { this.vodPlayer.play() } } // 영상 풀스크린으로 보이게 this.fullscreen = function () { if (this.vodPlayer.getFullscreen()) { this.vodPlayer.setFullscreen(false) } else { this.vodPlayer.setFullscreen(true) } } // 음소거 this.mute = function () { if (jwplayer().getMute()) { jwplayer().setMute(false); } else { jwplayer().setMute(true); } } // 자막 보이게 안 보이게 토글 기능 this.toggleCaption = function () { if( self.vodPlayer.getCurrentCaptions() == 0 ) { setCaptionsOn(self.vodPlayer); } else { setCaptionsOff(self.vodPlayer); } } // 영상 자동 재생 토글 toggleAutoStart this.toggleAutoStart = function () { self.settings.isAutoPlay = !self.settings.isAutoPlay; var $autoPlay = $(".jw-button-autostart"); $autoPlay.toggleClass('on'); if ($autoPlay.hasClass('on')) { localStorage.setItem('jwplayer-autoStart', 'true'); } else { localStorage.setItem('jwplayer-autoStart', 'false'); } } // 동영상 퍼가기 (iframe) this.embedVideo = function () { var vod = ''; if (self.settings.highVodUrl) { vod = self.settings.highVodUrl; } else { vod = self.settings.lowVodUrl; } var embedVideoUrl = application.rootUrlPrefix + '/news/pc/view/embedVideo.do?vodUrl=' + vod + '&imgUrl=' + self.settings.imgUrl; var embedUrl = '&lt;iframe width="100%" height="100%" src="' + embedVideoUrl + '" ' + 'title="video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; ' + 'encrypted-media; gyroscope; web-share" allowfullscreen&gt;&lt;/iframe&gt;'; $('.video-embed-popup .embed-text').html(embedUrl); $('.video-embed-popup').addClass("on"); $('.dim').addClass("on"); $('.body').addClass("on"); $('.header-nav-wrapper').addClass("index-change"); } // 자체영상 에서는 바로 init(); this.init(); this.vodPlayer.play(); } // _KbsPlayer 에서 사용 function getKBSHlsVodUrl(vodUrl) { if (!vodUrl) { message = 'VOD URL 정보가 없습니다.' return null; } var cdnYn = 'N', duty = 'N', blockingYn = 'N'; if (vodUrl.indexOf('|') == 0) { var vodInfos = vodUrl.split('|'); duty = vodInfos[1]; cdnYn = vodInfos[2]; blockingYn = vodInfos[3]; vodUrl = vodInfos[4]; } cdnYn = 'Y'; //무조건 cdn으로 실행 if (duty.indexOf('^') >= 0) { var dutyInfos = duty.split('^'); dutyYn = dutyInfos[0]; if (dutyYn == 'Y') { duty_code = dutyInfos[1]; if (duty_code) { var dutyMsg = ''; $.ajax({ url: application.rootUrlPrefix + '/news/getVodDutyCodeMsg.do', type: "POST", async: false, dataType: 'json', data: { dutyCode: duty_code }, success: function (data, status) { if (data.dutyMsg && data.dutyMsg.resultcode == 1) { dutyMsg = data.dutyMsg.duty_msg; } else { dutyMsg = '저작권 관련 서비스 사용이 불가합니다.'; } }, error: function (request, status, error) { dutyMsg = '저작권 관련 서비스 사용이 불가합니다.'; } }); message = dutyMsg; return null; } } } else { dutyYn = duty; } if (dutyYn == 'Y') { message = '저작권 관련 서비스 사용이 불가합니다.'; return null; } if ("Y" == blockingYn) { var blocking = ''; $.ajax({ url: application.rootUrlPrefix + '/api/getIpInfo', type: "POST", async: false, dataType: 'json', success: function (data, status) { if (data.isAbroadIp) { blocking = data.isAbroadIp; //해외 IP 확인 } }, error: function (request, status, error) { blocking = 'N'; } }); if ("N" == blocking) { message = '저작권 관련 서비스 사용이 불가합니다.'; return; } } // VOD URL 조회 if (!vodUrl) { message = 'VOD URL 정보가 없습니다.'; return null; } if (vodUrl.indexOf("/") == 0) { vodUrl = vodUrl.substr(1); } var hlsUrl = null; if (cdnYn == 'Y') { $.ajax({ url: application.rootUrlPrefix + '/api/getHlsNewsVodUrl', type: "POST", async: false, dataType: 'json', data: { vodUrl: vodUrl }, success: function (data, status) { if (data && data.success) { hlsUrl = data.data.streamUrl; } else { hlsUrl = null; if (data && data.message) { message = data.message; } else { message = 'VOD Url 정보를 가지고 오는데 실패하였습니다.'; } } }, error: function (request, status, error) { hlsUrl = null; message = 'VOD Url 정보를 가지고 오는데 실패하였습니다. >> [' + error + ']'; } }); } return hlsUrl; } // 페이스북 공유 function shareFacebook() { var shareUrl = 'https://www.facebook.com/sharer/sharer.php?u=' + encodedCurrentUrl; openPopup(shareUrl); } // 트위터 공유 function shareTwitter() { var shareUrl = "https://twitter.com/intent/tweet?url=" + encodedCurrentUrl; openPopup(shareUrl); } // 카카오공유 function shareKakao() { var shareDesc = document.getElementById('facebook_desc').getAttribute('content'); var shareImg = document.getElementById('facebook_img').getAttribute('content'); var mShareUrl = currentUrl; Kakao.Link.sendDefault({ objectType: "feed" , content: { title: "KBS News" // 콘텐츠의 타이틀 , description: shareDesc // 콘텐츠 상세설명 , imageUrl: shareImg // 썸네일 이미지 , link: { webUrl: currentUrl, // 모바일 카카오톡에서 사용하는 웹 링크 URL } }, buttons: [ { title: '웹으로 이동', link: { mobileWebUrl: mShareUrl, webUrl: currentUrl }, }, ] }); //sendDefualt } // 카카오스토리 공유 function shareKakaoStory() { var origin = currentUrl.match(/^(https?:\/\/[^/]+)/)[1]; var shareUrl = "https://story.kakao.com/s/share?url=" + currentUrl + "&kakao_agent=sdk%2F1.43.1%20os%2Fjavascript%20sdk_type%2Fjavascript%20lang%2Fko-KR%20device%2FWin32%20origin%2F" + origin + "&app_key=d57b7eca9db04c5ccd91e4d309ce0288"; openPopup(shareUrl); } // 네이버블로그 공유 function shareNaverBlog() { var shareUrl = 'http://blog.naver.com/openapi/share?url=' + encodedCurrentUrl + '&title='; openPopup(shareUrl); } // 네이버밴드 공유 function shareNaverBand() { var shareUrl = "https://band.us/plugin/share?body=" + encodedCurrentUrl + "&route=" + encodedCurrentUrl; openPopup(shareUrl); } // arguments와 defaults의 property를 가져와 속성을 합치는 함수 function extendDefaults(defaults, props) { var prop; for (prop in props) { if (props.hasOwnProperty(prop)) { defaults[prop] = props[prop]; } } return defaults; } var sendVodWatchLog = function (playerId) { if (typeof playerId == 'undefined') return; try { const state = jwplayer(playerId).getState(); if (jwplayer(playerId).$state != 'B') { switch (state) { case 'playing': jwplayer(playerId).$state = 'S'; // play break; case 'paused': jwplayer(playerId).$state = 'P'; // paused break; case 'complete': jwplayer(playerId).$state = 'C'; // complete break; default: jwplayer(playerId).$state = 'Z'; // etc break; } // seek if(jwplayer(playerId).$isSeeking) { jwplayer(playerId).$state = 'M' } } // watchStartTime if( jwplayer(playerId).$state == 'S' ) { jwplayer(playerId).$watchStartTime = dayjs(); } // watchEndTime jwplayer(playerId).$watchEndTime = dayjs(); let gapTime = dayjs.duration(jwplayer(playerId).$watchEndTime.diff(jwplayer(playerId).$watchStartTime)).asMilliseconds() * 0.001; // 재생시간이 늘어나지 않는 경우 ('P || M -> *') if(jwplayer(playerId).$beforeState == 'P' || jwplayer(playerId).$beforeState == 'M') { gapTime = 0; } jwplayer(playerId).$watchTime += gapTime; // param2: 선택한 영상의 총 재생시간 // param3: 선택한 영상의 재생 위치 (M 일 때는 마지막 시청위치) // param12: 선택한 영상의 mediasetSeq var param2 = Math.floor(jwplayer(playerId).getDuration()); var param3 = (jwplayer(playerId).$state == 'M') ? Math.floor(jwplayer(playerId).$seekPosition) : Math.floor(jwplayer(playerId).getPosition()); var param12 = getParam12(playerId); var sendWatchTime = Math.floor(jwplayer(playerId).$watchTime); var sendState = jwplayer(playerId).$state; // console.log('watch', 'VOD', param2, param3, param4, '', sendWatchTime, sendState, '', '', '', '', param12, param13); window._add_rte('watch', 'VOD', param2, param3, param4, '', sendWatchTime, sendState, '', '', '', '', param12, param13); // beforeState update jwplayer(playerId).$beforeState = jwplayer(playerId).$state; } catch (e) { // 새로고침 시 플레이어가 생성되기 전 발생 console.error('sendVodWatchLog : ', e.message); } }; var sendVodWatchLogInterval = function (playerId) { // param2: 선택한 영상의 총 재생시간 // param12: 선택한 영상의 mediasetSeq var param2 = Math.floor(jwplayer(playerId).getDuration()); var param12 = getParam12(playerId); // setInterval var id = setInterval(function () { // param3: 선택한 영상의 재생 위치 갱신 var param3 = Math.floor(jwplayer(playerId).getPosition()); // watchtime jwplayer(playerId).$watchStartTime = dayjs(); // $watchStartTime도 함께 갱신 해준다. jwplayer(playerId).$watchEndTime = dayjs(); // $watchEndTime도 함께 갱신 해준다. jwplayer(playerId).$watchTime += (logIntervalTime/1000); var sendWatchTime = Math.floor(jwplayer(playerId).$watchTime); var sendState = jwplayer(playerId).$state; // console.log('watch', 'VOD', param2, param3, param4, '', sendWatchTime, sendState, '', '', '', '', param12, param13); window._add_rte('watch', 'VOD', param2, param3, param4, '', sendWatchTime, sendState, '', '', '', '', param12, param13); }, logIntervalTime); return id; } // param12: 선택한 영상의 mediasetSeq (영상의 순서, 1부터 시작) function getParam12(playerId) { // mediasetSeq는 playerId에서 가져올 수 있다. // 대표영상일 경우 mediasetSeq: playerId: playerElement // 자체영상일 경우 mediasetSeq: player_contentsTag_0 ~ ... (+1 해서 1부터 사용) if ( playerId.includes('player_') ) { // 자체영상 일 경우 return param12 = playerId.split('_')[2] * 1 + 1; } return 1; } // 자막 파일 가져오기 function getCaption() { var captionUrl = ""; var srtUrl = ""; var lowVod = isEmptyStr("/newsmp4/flash/2019/02/27/40.mp4", "/newsmp4/flash/2019/02/27/1500k/40.mp4"); var captionYn = isEmptyStr("", 'N'); var arrUrl = lowVod.split('|'); srtUrl = arrUrl[arrUrl.length - 1].replace('.mp4', '.srt'); if (captionYn == "Y") { captionUrl = '/data/srt/FIXED' + srtUrl } else { captionUrl = null } captionUrl = (captionUrl == null) ? "/resource/image/mobile/player/myFilevtt.vtt" : captionUrl; return captionUrl; } // 추천동영상용 데이터 가져오기 function getRecommendPlaylist(param, successCallback, errorCallback) { return $.ajax({ url: application.rootUrlPrefix + '/api/getRecommendVod?newsCode=' + param, type: "POST", dataType: 'json', data: param, success: successCallback, error: errorCallback }); } // 추천동영상 DOM 렌더링 function displayRecommendPlaylist (res, playerId) { var data = []; if (res.data.length == 0) { return; } if (res && res.data.length > 0) { data = res.data; } var length = 4; for (var i = 0; i < length; i++) { var $thumb = $('<a href="#" class="vod-recommed-thumb" data-order="7"></a>').clone(); var $title = $('<span class="vod-recommed-title" style="display: none"></span>'); var $p = $('<p class="vod-recommend-desc"></p>'); $thumb.css('background-image', 'url(' + application.rootUrlPrefix + data[i].imgUrl + ')'); $thumb.addClass('recommed-' + i); $thumb.attr('href', data[i].url); var title = (data[i].title).replace(/<br>/g, ''); $title.css('display', 'flex'); $p.text(title); $title.append($p); $thumb.append($title); $(`#${playerId}`).append($thumb); } } // 영어뉴스일 경우 true를 반환환다. function isEngNews() { const sourceCode = "200" return (sourceCode == "172") ? true : false; } // 영어뉴스일 경우: html에 data-news-lang="en"을 추가한다. function setEngNews() { if (!isEngNews()) return; $("html").attr("data-news-lang", "en"); } // 영어뉴스 자막 초기설정 function setNewsCaptions(vodPlayer) { if( isEngNews() ) setCaptionsOn(vodPlayer); setCaptionsIcon(vodPlayer); } // 자막 켜기 function setCaptionsOn(vodPlayer) { vodPlayer.setCurrentCaptions(1); setCaptionsIcon(vodPlayer); } // 자막 끄기 function setCaptionsOff(vodPlayer) { vodPlayer.setCurrentCaptions(0); setCaptionsIcon(vodPlayer); } // 자막 켜기/끄기 아이콘 function setCaptionsIcon(vodPlayer) { const currentPlayer = $(`#${vodPlayer.id}`); if( vodPlayer.getCurrentCaptions() == '0' ) { currentPlayer.find(".jw-button-caption").removeClass('on'); } else { currentPlayer.find(".jw-button-caption").addClass('on'); } } // ios safari check function isSafari() { return /^((?!chrome|android).)*safari/i.test(navigator.userAgent); } // error message function displayErrorMessage(playerId, message) { $(`#${playerId}`).parents(".player-app").find(".error-message").html(message).show(); } </script> <div class="player-app" id="vod_template" style="display:none;"> <div class="player-wrap"> <div class="multi_player" tabindex="0"></div> <div class="multi_player_image" style="display: none"> <img class="img" src="" alt="thumbnail" onerror="javascript:handleError(this);"> <button type="button" class="play-button"></button> </div> </div> <p class="player-caption"></p> </div> <link rel="stylesheet" type="text/css" href="/resource/css/pc/view/owl-carousel2.css" media="all" /> <script src="/resource/module/owl.carousel-2.3.4/owl.carousel.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script> $(document).ready(function(){ var $wrap = $('.component-box.cardnews'); var $slider = $wrap.find('.slider'); $wrap.each(function() { var $tg = $(this); var $slider = $tg.find('.card-list'); $slider.on('initialized.owl.carousel changed.owl.carousel', function(e){ $tg.find('.progress .current').text(e.item.index + 1); $tg.find('.progress .total').text(e.item.count); if (e.item.index < 1) { $tg.find('.btn-prev').addClass('disabled'); } else { $tg.find('.btn-prev').removeClass('disabled'); } if (e.item.index + 1 == e.item.count) { $tg.find('.btn-next').addClass('disabled'); } else { $tg.find('.btn-next').removeClass('disabled'); } }); $slider.owlCarousel({ items:1, lazyLoad:true, loop:false, rtl:false }); $tg.find('.btn-next').click(function() { $slider.trigger('next.owl.carousel'); }) $tg.find('.btn-prev').click(function() { $slider.trigger('prev.owl.carousel'); }) }); }); </script> <style> .disabled { display: none; } .section.photonews img { margin: auto; } .cardnews .disabled { display: block; } </style> <div class="prev-next-links"> <a href="/news/pc/view/view.do?ncd=4147556" class="prev-link" aria-label="이전 기사 링크"> <span class="arrow-icon"></span> <div class="prev-title-wrapper"> <span class="prev-txt">이전</span> <div class="title-img"> <p class="title">2019 북미정상회담 [13시 42분 뉴스특보]</p> <div class="img-wrapper"> <img class="img" src="https://news.kbs.co.kr/data/news/2019/02/27/4147556_30.jpg" alt="2019 북미정상회담 [13시 42분 뉴스특보]" onerror="javascript:handleError(this);"/> </div> </div> </div> </a> <a href="/news/pc/view/view.do?ncd=4147755" class="next-link" aria-label="다음 기사 링크"> <div class="next-title-wrapper"> <div class="title-img"> <div class="img-wrapper"> <img class="img" src="https://news.kbs.co.kr/data/news/2019/02/27/4147755_50.jpg" alt="2019 북미정상회담 [17시 10분 뉴스특보]" onerror="javascript:handleError(this);"/> </div> <p class="title">2019 북미정상회담 [17시 10분 뉴스특보]</p> </div> <span class="next-txt">다음</span> </div> <span class="arrow-icon"></span> </a> </div> <div class="detail-body font-size" id="cont_newstext"> <!-- 서비스 기사 --> <!-- 기사본문 필요한 부분을 치환 --> </div> <div class="artical-btm" style="text-align: left"><br />■ 제보하기<br />▷ 카카오톡 : 'KBS제보' 검색, 채널 추가<br />▷ 전화 : 02-781-1234, 4444<br />▷ 이메일 : kbs1234@kbs.co.kr<br />▷ 유튜브, 네이버, 카카오에서도 KBS뉴스를 구독해주세요!</div><br/><br/> </div> <!-- 프린트 영역 --> <div class="hide" id="mailHtmlContentsTop" > <div id="mailHtmlContents" > <ul class="subjectArea_print"> <li class="tit">2019 북미정상회담 [16시 뉴스특보]</li> <li class="time"> <ul> <li><span>입력</span> 2019-02-27 17:11:15</li> <li><span>수정</span>2019-02-27 17:22:59</li> </ul> <span class="program_name">특보</span> </li> </ul> <!-- summary --> <!-- /// 이미지 ss /// --> <div class="view_con_img"> <img src="/data/news/2019/02/27/4147650_40.jpg" style="width:596px;" /> </div> <div class="view_con_text"> <!-- processView --> </div> </div> <!-- 기자 정보 --> <div> <dl class="news-writer"> <dd> <ul class="list-reporter" id="ulReporterList"> </ul> </dd> </dl> </div> </div> <!-- //프린트 영역 --> <!-- 기사 cont area --> <div class="inner_newstext" id="cont_newstext1" > <div id="layerPopupDiv" style="display: none; width:100%; "></div> </div> <style> .hide { display: none; } </style> <div class="view-article-like view-box"> <h4 class="title">이 기사가 좋으셨다면</h4> <ul class="like-btns"> <li class="like-btns-list"> <button type="button" class="like-btn positive-btn" onclick="javascript:addRecommend('4147650', '1')"></button> <div class="btn-title-wrapper"> <p class="btn-title">좋아요</p> <p class="click-numbers">0</p> </div> </li> <li class="like-btns-list"> <button type="button" class="cheer-btn positive-btn" onclick="javascript:addRecommend('4147650', '2')"></button> <div class="btn-title-wrapper"> <p class="btn-title">응원해요</p> <p class="click-numbers">0</p> </div> </li> <li class="like-btns-list"> <button type="button" class="want-btn positive-btn" onclick="javascript:addRecommend('4147650', '3')"></button> <div class="btn-title-wrapper"> <p class="btn-title">후속 원해요</p> <p class="click-numbers">0</p> </div> </li> </ul> </div> <script type="text/javascript"> $(function () { displayRecommends(); }); function displayRecommends() { // 해당 기사의 공감 기사를 가져온다 var url = '/api/auth/recommend/getRecommendCountByType'; var param = { newsCode: getParameterByName('ncd') }; postAjax(url, param, function (result) { if (result && result.success) { var totalCount = result.data.dataByType[1].recommendCount + result.data.dataByType[2].recommendCount + result.data.dataByType[3].recommendCount; if (totalCount >= 1000) { totalCount = '999+' } $('.like-btn .common-btn-txt').text(totalCount); $('.like-btns-list:eq(0) .click-numbers').text(formatNumber(result.data.dataByType[1].recommendCount)); $('.like-btns-list:eq(1) .click-numbers').text(formatNumber(result.data.dataByType[2].recommendCount)); $('.like-btns-list:eq(2) .click-numbers').text(formatNumber(result.data.dataByType[3].recommendCount)); if (result.data.dataByType[1].recommendYn) { $('.like-btns .like-btn').addClass('on'); } else { $('.like-btns .like-btn').removeClass('on'); } if (result.data.dataByType[2].recommendYn) { $('.like-btns .cheer-btn').addClass('on'); } else { $('.like-btns .cheer-btn').removeClass('on'); } if (result.data.dataByType[3].recommendYn) { $('.like-btns .want-btn').addClass('on'); } else { $('.like-btns .want-btn').removeClass('on'); } } }); } </script> <div class="view-hot-click view-box"> <div class="title-wrapper"> <h4 class="title">오늘의 핫 클릭</h4> <p class="sub-title">실시간 뜨거운 관심을 받고 있는 뉴스</p> </div> <div class="view-links"> <a class="view-link" href=""> <div class="thumbnail"> <img class="img" src="" alt="" onerror="javascript:handleError(this);" /> <span class=""></span> </div> <div class="txt-wrapper"> <p class="title"></p> </div> </a> </div> </div> <script> $(function() { var successCallback = function( data, status ) { for(var i=0; i < 8; i++) { var $a = $(".view-hot-click .view-links a").first().clone(); $a.attr('href', data[i].url); $a.find("img").attr('src', ((data[i].imgUrl != null && data[i].imgUrl != "") ? data[i].imgUrl : application.defaultImage)); $a.find("img").attr('alt', data[i].title); $a.find("p.title").text(data[i].title); if(data[i].vodUrl !="") { $a.find("img").next('span').addClass("play-icon"); } $(".view-hot-click .view-links").append($a); } $(".view-hot-click .view-links a").first().remove(); } getExposeData(359, getParameterByName('pubExec'), successCallback); }); </script> <!-- //오늘의 HOT클릭! area --> <div class="view-ai-pick view-box" style="display:none;"> <div class="title-wrapper"> <h4 class="title">AI 픽</h4> <p class="sub-title"> 인공지능이 연관 기사를 추천합니다. </p> </div> <div class="view-links"> <a class="view-link" href=""> <div class="thumbnail"> <img class="img" src="" alt="" onerror="javascript:handleError(this);" /> <span class=""></span> </div> <div class="txt-wrapper"> <p class="title"></p> </div> </a> </div> </div> <script type="text/javascript"> $(function () { displayRecNewsList(); }); function displayRecNewsList() { var actionUrl = "/api/getRecommendNews"; $.ajax({ url: actionUrl, type: "GET", data: { newsCode: '4147650' , sort: "popular" }, dataType: 'json', success: function (data, status) { if (data && data.data && data.data.length > 0) { for (i = 0; i < Math.min(data.data.length, 4); i++) { var item = data.data[i]; var $a = $('.view-ai-pick .view-links a').first().clone(); $a.attr('href', item.targetUrl); $a.find("img").attr('src', ((item.tumbnailUrl != null && item.tumbnailUrl != "") ? item.tumbnailUrl : application.defaultImage)); $a.find("p.title").text(item.title); if (item.vodYn == 'Y'){ $a.find("img").next('span').addClass('play-icon'); } $('.view-ai-pick .view-links').append($a); } $('.view-ai-pick .view-links a').first().remove(); $(".view-ai-pick").show(); } } }); } </script> <div class="comment-area" id="comment-area"> <h4 class="title">이 기사에 대한 의견을 남겨주세요.</h4> </div> <div id="msg" class=""> <div class="reply"> <!--<p class="reply-info">댓글 이용시 소셜계정으로 로그인하셔야 하며 로그인하시면 소셜회원으로 표시됩니다.</p>--> <div id="lv-container" data-id="kbs" data-uid="NDE4LzIzNjQwLzQ2Mg=="></div> </div> </div> <script> $(function () { var liverePath = 'news.kbs.co.kr:80'; var memberId = ''; var newsCode = getParameterByName('ncd'); window.livereOptions = { refer: liverePath + '/news/view.do?ncd=' + newsCode, customMessage: { m_kbs: 'KBS', m_write_placeholder: '댓글을 입력해 주세요.' } }; (function (d, s) { var j, e = d.getElementsByTagName(s)[0]; if (typeof LivereTower === 'function') { return; } j = d.createElement(s); j.src = 'https://cdn-city.livere.com/js/embed.dist.js'; j.async = true; e.parentNode.insertBefore(j, e); })(document, 'script'); //SNS 퍼가기 function getLiverePosting(value, requestData) { var snsGubun = ''; if (requestData.service == 'kbs') snsGubun = '1'; if (requestData.service == 'facebook') snsGubun = '2'; if (requestData.service == 'twitter') snsGubun = '3'; if (requestData.service == 'me2day') snsGubun = '4'; if (requestData.service == 'yozm') snsGubun = '5'; if (requestData.service == 'cyworld') snsGubun = '6'; if (requestData.service == 'kakao') snsGubun = '7'; if (snsGubun != '') { $.ajax({ url: '/api/api/social/insertSNS" />', type: "POST", dataType: 'json', data: { SAVE_NEWS_CODE: newsCode, SAVE_RT_GUBUN: snsGubun, LOGIN_MEMBER_ID: memberId } }); } } }); </script> </div> <div class="side-contents-wrapper"> <div class="side-headline view-box"> <h4 class="side-title">헤드라인</h4> <div class="side-contents news-list"> <a href="/news/pc/view/view.do?ncd&#x3D;8177290" class="main-news view-link"> <div class="thumbnail"> <img class="img" src="/data/news/2025/02/16/20250216_CjbIHa.jpg" alt="한미 “동맹 강화, 북 비핵화” 확인…‘중국 견제’ 동참은 과제" onerror="javascript:handleError(this);"/> <span class="play-icon"></span> </div> <p class="title">한미 “동맹 강화, 북 비핵화” 확인…‘중국 견제’ 동참은 과제</p> </a> <a href="/news/pc/view/view.do?ncd&#x3D;8177245" class="sub-news view-link"> <div class="thumbnail"> <img class="img" src="/data/layer/904/2025/02/20250216_N2ZZOe.jpg" alt="민주당 “계엄 당시 국회 일부 단전 확인…철저한 수사 촉구”" onerror="javascript:handleError(this);"/> <span class="play-icon"></span> </div> <p class="title">민주당 “계엄 당시 국회 일부 단전 확인…철저한 수사 촉구”</p> </a> <a href="/news/pc/view/view.do?ncd&#x3D;8177261" class="sub-news view-link"> <div class="thumbnail"> <img class="img" src="/data/news/2025/02/16/20250216_BsZ5kf.jpg" alt="윤 대통령 측 “대통령 단전 &lt;br&gt;지시사실 없어…곽종근 임의 지시”" onerror="javascript:handleError(this);"/> </div> <p class="title">윤 대통령 측 “대통령 단전 지시사실 없어…곽종근 임의 지시”</p> </a> <a href="/news/pc/view/view.do?ncd&#x3D;8177276" class="sub-news view-link"> <div class="thumbnail"> <img class="img" src="/data/layer/904/2025/02/20250216_gYK6rt.jpg" alt="‘6명 사망’ 부산 리조트 공사장 화재…“배관 주변서 발화”" onerror="javascript:handleError(this);"/> <span class="play-icon"></span> </div> <p class="title">‘6명 사망’ 부산 리조트 공사장 화재…“배관 주변서 발화”</p> </a> </div> </div> <a class="side-banner" href="https://news.kbs.co.kr/news/pc/issue/issueList.do?icd&#x3D;19648&amp;ref&#x3D;pRnb" target="_blank"> <img class="img" src="/data/layer/652/2023/06/20230609_MPfEhJ.png" alt="수신료" onerror="javascript:handleError(this);"/> </a> <a class="side-banner" href="https://news.kbs.co.kr/news/pc/issue/issueList.do?icd&#x3D;19648&amp;ref&#x3D;pRnb" target="_blank"> <img class="img" src="/data/layer/652/2023/06/20230609_MPfEhJ.png" alt="수신료" onerror="javascript:handleError(this);"/> </a> <div class="side-most-viewed view-box"> <h4 class="side-title has-border">많이 본 뉴스</h4> <div class="side-contents"> <ul class="tab-btns type-03" data-tab-contents="side-most-viewed"> <li class="tab-btns-list on"> <button type="button" class="tab-btn">KBS</button> </li> <li class="tab-btns-list"> <button type="button" class="tab-btn">포털</button> </li> <li class="tab-btns-list"> <button type="button" class="tab-btn">유튜브</button> </li> </ul> <ul class="tab-contents" id="side-most-viewed"> <li class="tab-contents-list"> <p class="guide-txt"> 각 플랫폼에서 최근 1시간 동안 많이 본 KBS 기사를 제공합니다. </p> <ul class="ranks"> <li class="ranks-list"> <a href="/news/view.do?ncd&#x3D;8177176" class="ranks-link"> <span class="rank-badge">1</span> <p class="title">“‘런종섭’에 화났다”…윤 대통령의 ‘상식’은?</p> </a> </li> <li class="ranks-list"> <a href="/news/view.do?ncd&#x3D;8177200" class="ranks-link"> <span class="rank-badge">2</span> <p class="title">국민의힘 “트럼프와 통화도 못해…민주당, 한덕수 대행 탄핵 사죄해야”</p> </a> </li> <li class="ranks-list"> <a href="/news/view.do?ncd&#x3D;8177228" class="ranks-link"> <span class="rank-badge">3</span> <p class="title">이재명 “계엄 시행됐다면, ‘코리안 킬링필드’ 열렸을 것”</p> </a> </li> <li class="ranks-list"> <a href="/news/view.do?ncd&#x3D;8177175" class="ranks-link"> <span class="rank-badge">4</span> <p class="title">대법 “‘장자연 보도’ MBC, TV조선 부사장에 배상” 확정</p> </a> </li> <li class="ranks-list"> <a href="/news/view.do?ncd&#x3D;8176946" class="ranks-link"> <span class="rank-badge">5</span> <p class="title">“이것이 K-시민의식” 도로에 쏟아진 병 줍고 갈길 가는 chill~ 코리안들</p> </a> </li> <li class="ranks-list"> <a href="/news/view.do?ncd&#x3D;8174417" class="ranks-link"> <span class="rank-badge">6</span> <p class="title">“사기 사이트 몇분 만에 뚝딱 제작”…사업자 피해도 속출</p> </a> </li> </ul> </li> <li class="tab-contents-list"> <p class="guide-txt"> 각 플랫폼에서 최근 1시간 동안 많이 본 KBS 기사를 제공합니다. </p> <ul class="ranks data"> <li class="ranks-list"> <a href="" class="ranks-link"> <span class="rank-badge"></span> <p class="title"></p> </a> </li> </ul> <ul class="ranks no-data" style="display: none"> <li class="ranks-list"> <p class="txt">준비중입니다.</p> </li> </ul> </li> <li class="tab-contents-list"> <p class="guide-txt"> 각 플랫폼에서 최근 1시간 동안 많이 본 KBS 기사를 제공합니다. </p> <ul class="ranks"> <li class="ranks-list"> <a href="" class="ranks-link"> <span class="rank-badge"></span> <p class="title"></p> </a> </li> </ul> </li> </ul> </div> </div> <script type="text/javascript"> $(function () { getManyWatchingNews(); }); function getManyWatchingKbsNews() { getExposeData(329, getParameterByName('pubExec'), function (data) { if (data.length > 0) { for (var i = 0; i < Math.min(data.length, 6); i++) { var $li = $('#side-most-viewed li.tab-contents-list:eq(0) ul li').first().clone(); $li.find('a').attr('href', data[i].url); $li.find('span').text(i+1); $li.find('p.title').text(data[i].title) $('#side-most-viewed li.tab-contents-list:eq(0) ul').append($li); } $('#side-most-viewed li.tab-contents-list:eq(0) ul li').first().remove(); } }); } function getManyWatchingPortalNews() { $.get('https://news.kbs.co.kr/ranking/portal.json', function (data) { if (data.length > 0) { for (var i = 0; i < Math.min(data.length, 6); i++) { var $li = $('#side-most-viewed li.tab-contents-list:eq(1) ul li').first().clone(); $li.find('a').attr('href', '/news/view.do?ncd=' + data[i].data.newsCode); $li.find('span').text(i+1); $li.find('p.title').text(data[i].data.newsTitle) $('#side-most-viewed li.tab-contents-list:eq(1) ul').append($li); } $('#side-most-viewed li.tab-contents-list:eq(1) ul li').first().remove(); } }).fail(function(jqXHR, textStatus, errorThrown) { $('#side-most-viewed li.tab-contents-list:eq(1) ul.data').hide(); $('#side-most-viewed li.tab-contents-list:eq(1) ul.no-data').show(); }); } function getManyWatchingYoutubeNews() { $.get('https://news.kbs.co.kr/ranking/youtube.json', function (data) { // onair news24 풀영상은 제외 if (data && data.length > 0) { if (Array.isArray(data)) { data = data.filter(function(v){ return v.title.indexOf('[🔴이슈]') < 0 && v.title.indexOf('[LIVE]') < 0 && v.title.indexOf('[풀영상]') < 0; }) } } if (data.length > 0) { for (var i = 0; i < Math.min(data.length, 6); i++) { var $li = $('#side-most-viewed li.tab-contents-list:eq(2) ul li').first().clone(); $li.find('a').attr('href', data[i].url); $li.find('a').attr('target', '_blank'); $li.find('span').text(i+1); $li.find('p.title').text(data[i].title); $('#side-most-viewed li.tab-contents-list:eq(2) ul').append($li); } $('#side-most-viewed li.tab-contents-list:eq(2) ul li').first().remove(); } }); } function getManyWatchingNews() { getManyWatchingPortalNews(); getManyWatchingYoutubeNews(); } </script> <style> #side-most-viewed .no-data .txt { height: 405px; } </style> <script type="text/javascript"> $(function () { var successCallback = function (data, status) { $('.side-banner:eq(0)').attr('href', data[0].url); $('.side-banner:eq(0) img').attr('src', data[0].imgUrl).attr('alt', data[0].title); if (data[0].url.indexOf('http') >= 0) { $('.side-banner:eq(0)').attr('target', '_blank'); } $('.side-banner:eq(1)').attr('href', data[1].url); $('.side-banner:eq(1) img').attr('src', data[1].imgUrl).attr('alt', data[1].title); if (data[1].url.indexOf('http') >= 0) { $('.side-banner:eq(1)').attr('target', '_blank'); } $('.side-banner:eq(2)').attr('href', data[2].url); $('.side-banner:eq(2) img').attr('src', data[2].imgUrl).attr('alt', data[2].title); if (data[2].url.indexOf('http') >= 0) { $('.side-banner:eq(2)').attr('target', '_blank'); } }; getExposeData(652, getParameterByName('pubExec'), successCallback); }); </script> </div> </div> </main> <footer id="footer"> <div class="full-menu-wrapper"> <div class="full-menu"> <h2 class="blind">전체메뉴</h2> <div class="common-menu field-menu"> <div class="full-menu-links-wrapper"> <h3>분야별</h3> <div class="full-menu-links-group"> <ul class="full-menu-links"> <li><a href="/news/pc/category/category.do?ref=pSiteMap">전체</a></li> <li><a href="/news/pc/category/category.do?ctcd=0003&ref=pSiteMap">정치</a></li> <li><a href="/news/pc/category/category.do?ctcd=0004&ref=pSiteMap">경제</a></li> <li><a href="/news/pc/category/category.do?ctcd=0005&ref=pSiteMap">사회</a></li> <li><a href="/news/pc/category/category.do?ctcd=0008&ref=pSiteMap">문화</a></li> <li><a href="/news/pc/category/category.do?ctcd=0007&ref=pSiteMap">IT·과학</a></li> <li><a href="/news/pc/category/category.do?ctcd=0006&ref=pSiteMap">국제</a></li> <li><a href="/news/pc/category/category.do?ctcd=0095&ref=pSiteMap">재난·기후·환경</a></li> <li><a href="/news/pc/category/category.do?ctcd=0034&ref=pSiteMap">생활·건강</a></li> <li><a href="/news/pc/sports/sports.html?ref=pSiteMap">스포츠</a></li> <li><a href="/news/pc/enter/enter.html?ref=pSiteMap">연예</a></li> <li><a href="/news/pc/menu/listWeather.do?mcd=0048&ref=pSiteMap">날씨</a></li> <li><a href="/news/pc/issue/issue.html?ref=pSiteMap">이슈</a></li> </ul> </div> </div> </div> <div class="common-menu tv-menu"> <div class="full-menu-links-wrapper"> <h3>TV 뉴스</h3> <div class="full-menu-links-group"> <h4>1TV 뉴스</h4> <ul class="full-menu-links col-2"> <li><a href="/news/pc/program/program.do?bcd=0004&ref=pSiteMap">06:00 뉴스광장 1부</a></li> <li><a href="/news/pc/program/program.do?bcd=0010&ref=pSiteMap">17:00 뉴스 5</a></li> <li><a href="/news/pc/program/program.do?bcd=0003&ref=pSiteMap">07:00 뉴스광장 2부</a></li> <li><a href="/news/pc/program/program.do?bcd=0011&ref=pSiteMap">19:00 뉴스 7</a></li> <li><a href="/news/pc/program/program.do?bcd=0008&ref=pSiteMap">09:30 930뉴스</a></li> <li><a href="/news/pc/program/program.do?bcd=0001&ref=pSiteMap">21:00 뉴스 9</a></li> <li><a href="/news/pc/program/program.do?bcd=0009&ref=pSiteMap">12:00 뉴스 12</a></li> <li><a href="/news/pc/program/program.do?bcd=0012&ref=pSiteMap">22:50 뉴스라인 W</a></li> <li><a href="/news/pc/program/program.do?bcd=0137&ref=pSiteMap">14:00 뉴스 2</a></li> </ul> </div> <div class="full-menu-links-group col-2"> <h4>2TV 뉴스</h4> <ul class="full-menu-links"> <li><a href="/news/pc/program/program.do?bcd=0016&ref=pSiteMap">10:10 아침뉴스타임</a></li> <li><a href="/news/pc/program/program.do?bcd=0049&ref=pSiteMap">15:00 뉴스타임</a></li> <li><a href="/news/pc/program/program.do?bcd=0197&ref=pSiteMap">15:15 월드24</a></li> <li><a href="/news/pc/program/program.do?bcd=0199&ref=pSiteMap">18:00 경제콘서트</a></li> </ul> </div> <div class="full-menu-links-group col-2"> <h4>1TV 경인</h4> <ul class="full-menu-links"> <li><a href="/news/pc/program/program.do?bcd=0060&ref=pSiteMap">뉴스광장(경인)</a></li> <li><a href="/news/pc/program/program.do?bcd=0059&ref=pSiteMap">930뉴스(경인)</a></li> <li><a href="/news/pc/program/program.do?bcd=0051&ref=pSiteMap">뉴스7(경인)</a></li> <li><a href="/news/pc/program/program.do?bcd=0052&ref=pSiteMap">뉴스9(경인)</a></li> </ul> </div> <div class="full-menu-links-group"> <h4><a href="/news/pc/program/program.do?bcd=0042&ref=pSiteMap">뉴스특보</a></h4> </div> </div> </div> <div class="common-menu premiumk-menu"> <div class="full-menu-links-wrapper"> <h3>심층취재</h3> <ul class="full-menu-links col-2"> <li><a href="/news/pc/menu/menu.do?mcd=1127&ref=pSiteMap">심층K</a></li> <li><a href="/news/pc/menu/menu.do?mcd=0713&ref=pSiteMap">단독</a></li> <li><a href="/news/pc/menu/tamsaKList.do?mcd=1016&ref=pSiteMap">탐사K</a></li> <li><a href="/news/pc/menu/menu.do?mcd=1075&ref=pSiteMap">제대로 보겠습니다</a></li> <li><a href="/news/pc/menu/menu.do?mcd=0990&ref=pSiteMap">영상K</a></li> <li><a href="/news/pc/menu/menu.do?mcd=0938&ref=pSiteMap">크랩</a></li> <li><a href="/news/pc/menu/menu.do?mcd=1048&ref=pSiteMap">글로벌K</a></li> <li><a href="/news/pc/menu/menu.do?mcd=1032&ref=pSiteMap">팩트체크K</a></li> <li><a href="/news/pc/menu/menu.do?mcd=1039&ref=pSiteMap">스포츠K</a></li> </ul> <ul class="full-menu-links col-2"> <li><a href="/news/pc/menu/menu.do?mcd=0795&ref=pSiteMap">취재후</a></li> <li><a href="/news/pc/program/program.do?bcd=0023&ref=pSiteMap">News Today</a></li> <li class="w100"><a href="/news/pc/menu/menu.do?mcd=1126&ref=pSiteMap">주말엔</a></li> <li class="w100"><a href="/news/pc/menu/menu.do?mcd=1162&ref=pSiteMap">뒷北뉴스</a></li> <li class="w100"><a href="/special/climatesays/2023/main.html?&ref=pSiteMap">기후는 말한다</a></li> <li class="w100"><a href="/news/pc/menu/menu.do?mcd=1044&ref=pSiteMap">여심야심</a></li> </ul> </div> </div> <div class="common-menu current-affairs-menu"> <div class="full-menu-links-wrapper"> <h3>시사프로그램</h3> <div class="full-menu-links-group"> <h4>시사프로그램</h4> <ul class="full-menu-links"> <li><a href="/news/pc/sisa/sisaChang.do?ref=pSiteMap">시사기획 창</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0029&ref=pSiteMap">일요진단 라이브</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0198&ref=pSiteMap">더 보다</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0031&ref=pSiteMap">남북의 창</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0072&ref=pSiteMap">특파원 보고 세계는 지금</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0071&ref=pSiteMap">재난방송센터</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0073&ref=pSiteMap">사사건건</a></li> <li><a href="/news/pc/sisa/sisa.do?bcd=0061&ref=pSiteMap">인사이드 경인</a></li> </ul> </div> <div class="full-menu-links-group"> <h4>라디오</h4> <ul class="full-menu-links"> <li><a href="/news/pc/radio/radio.do?mcd=1139&ref=pSiteMap">전격시사</a></li> <li><a href="/news/pc/radio/radio.do?mcd=1125&ref=pSiteMap">성공예감</a></li> <li><a href="/news/pc/radio/radio.do?mcd=1138&ref=pSiteMap">뉴스레터K</a></li> </ul> </div> </div> </div> <div class="common-menu region-menu"> <div class="full-menu-links-wrapper"> <h3>지역뉴스</h3> <div class="full-menu-links-group"> <ul class="full-menu-links col-2"> <li><a href="/news/pc/local/local.do?lscd=10&ref=pSiteMap">부산</a></li> <li><a href="/news/pc/local/local.do?lscd=43&ref=pSiteMap">순천</a></li> <li><a href="/news/pc/local/local.do?lscd=11&ref=pSiteMap">울산</a></li> <li><a href="/news/pc/local/local.do?lscd=50&ref=pSiteMap">전주</a></li> <li><a href="/news/pc/local/local.do?lscd=20&ref=pSiteMap">창원</a></li> <li><a href="/news/pc/local/local.do?lscd=60&ref=pSiteMap">대전</a></li> <li><a href="/news/pc/local/local.do?lscd=21&ref=pSiteMap">진주</a></li> <li><a href="/news/pc/local/local.do?lscd=70&ref=pSiteMap">청주</a></li> <li><a href="/news/pc/local/local.do?lscd=30&ref=pSiteMap">대구</a></li> <li><a href="/news/pc/local/local.do?lscd=71&ref=pSiteMap">충주</a></li> <li><a href="/news/pc/local/local.do?lscd=31&ref=pSiteMap">안동</a></li> <li><a href="/news/pc/local/local.do?lscd=80&ref=pSiteMap">춘천</a></li> <li><a href="/news/pc/local/local.do?lscd=32&ref=pSiteMap">포항</a></li> <li><a href="/news/pc/local/local.do?lscd=81&ref=pSiteMap">강릉</a></li> <li><a href="/news/pc/local/local.do?lscd=40&ref=pSiteMap">광주</a></li> <li><a href="/news/pc/local/local.do?lscd=82&ref=pSiteMap">원주</a></li> <li><a href="/news/pc/local/local.do?lscd=41&ref=pSiteMap">목포</a></li> <li><a href="/news/pc/local/local.do?lscd=90&ref=pSiteMap">제주</a></li> </ul> </div> </div> </div> <div class="common-menu shortcut-menu"> <div class="full-menu-links-wrapper"> <h3>바로가기</h3> <div class="full-menu-links-group"> <ul class="full-menu-links"> <li><a href="//mypage.kbs.co.kr">좋아요 클립</a></li> <li><a href="/news/pc/report/report.html?ref=pSiteMap">제보</a></li> <li><a href="/news/pc/breaking/breaking.html?ref=pSiteMap">속보</a></li> <li><a href="https://d.kbs.co.kr/" target="_blank">재난포털</a></li> <li><a href="/news/pc/news24/news24.html?ref=pSiteMap">ON AIR</a></li> <li><a href="/news/pc/newsArchive/newsArchive.html?ref=pSiteMap">뉴스 아카이브</a></li> </ul> </div> <div class="full-menu-links-group"> <h3><a href="/news/pc/notice/notice.html?ref=pSiteMap">공지·정정</a></h3> </div> </div> </div> </div> </div> <div class="footer-notice-wrapper" style="display: none;"> <div class="footer-notice"> <p class="notice-title">공지사항</p> <a class="notice-txt" href="/news/pc/popup/notice.html" target="_blank" aria-label="공지사항 링크">테스트</a> </div> </div> <script> $(function () { // $.get('https://pbbsapi.kbs.co.kr/board/v1/list?bbs_id=R2017-0164-03-513128&page=1&page_size=1', function (data) { // // "공지·정정"만 해당js 파일에서 렌더링하고 공지사항을 header에서 api 호출하여 랜더링함 // if (data.data[0] && data.data[0].title) { // $('.footer-inform-wrapper').css('display', 'block'); // $('.footer-inform-wrapper a').text(data.data[0].title); // } // }); }); </script> <div class="footer-util-menu-wrapper"> <div class="footer-util-menu"> <div class="about-kbs-menu"> <div class="footer-common-select"> <button type="button" class="footer-select-btn" aria-label="KBS 소개 메뉴 펼침 버튼"> <span class="btn-txt">KBS 소개</span> <span class="arrow"></span> </button> <ul class="common-select-links"> <li class="common-select-list"> <a href="https://about.kbs.co.kr/index.html?sname=kbs&amp;stype=location" target="_blank" class="common-select-link" aria-label="주소/연락처 링크">주소/연락처</a> </li> <li class="common-select-list"> <a href="http://office.kbs.co.kr/susin/" target="_blank" class="common-select-link" aria-label="수신료 링크">수신료</a> </li> <li class="common-select-list"> <a href="https://about.kbs.co.kr/index.html?sname=recruit&amp;stype=recruit" target="_blank" class="common-select-link" aria-label="채용 링크">채용</a> </li> <li class="common-select-list"> <a href="https://about.kbs.co.kr" target="_blank" class="common-select-link" aria-label="About KBS 링크">About KBS</a> </li> </ul> </div> <ul class="kbs-related-links"> <li class="kbs-related-list"> <a href="https://petitions.kbs.co.kr/" target="_blank" class="kbs-related-link" aria-label="시청자권익센터 링크">시청자권익센터</a> </li> <li class="kbs-related-list"> <a href="https://audit.kbs.co.kr/CyberAudit/" target="_blank" class="kbs-related-link" aria-label="사이버 감사실 링크">사이버 감사실</a> </li> <li class="kbs-related-list"> <a href="https://pwwwapi.kbs.co.kr/api/v1/introduction/advertisement" target="_blank" class="kbs-related-link" aria-label="광고 링크">광고</a> </li> <li class="kbs-related-list"> <a href="https://sso.kbs.co.kr/SSO/KBSWeb/information/PermissionKR20100223.aspx" target="_blank" class="kbs-related-link" aria-label="이용약관 링크">이용약관</a> </li> <li class="kbs-related-list"> <a href="https://sso.kbs.co.kr/SSO/KBSWeb/information/monitionKR.aspx" target="_blank" class="kbs-related-link" aria-label="법적고지 링크">법적고지</a> </li> <li class="kbs-related-list"> <a href="https://sso.kbs.co.kr/SSO/KBSWeb/information/PersonalPoliciesKR.aspx" target="_blank" class="kbs-related-link" aria-label="개인정보처리방침 링크">개인정보처리방침</a> </li> <li class="kbs-related-list"> <a href="https://about.kbs.co.kr/index.html?sname=kbs&stype=rule#none" target="_blank" class="kbs-related-link" aria-label="윤리강령 링크">윤리강령</a> </li> </ul> </div> <div class="nchannel-world-menu"> <div class="footer-common-select"> <button type="button" class="footer-select-btn" aria-label="KBS N 채널 사이트 메뉴 펼침 버튼"> <span class="btn-txt">KBS N 채널</span> <span class="arrow"></span> </button> <ul class="common-select-links"> <li class="common-select-list"> <a href="https://drama.kbs.co.kr/" target="_blank" class="nchannel-link common-select-link" aria-label="KBS Drama 링크">KBS Drama</a> </li> <li class="common-select-list"> <a href="http://www.kbsn.co.kr/index" target="_blank" class="common-select-link" aria-label="KBS W 링크">KBS W</a> </li> <li class="common-select-list"> <a href="http://www.kbsn.co.kr/index" target="_blank" class="common-select-link" aria-label="KBS Kids 링크">KBS Kids</a> </li> <li class="common-select-list"> <a href="http://www.kbsn.co.kr/nplay/index" target="_blank" class="common-select-link" aria-label="KBS N Sports 링크">KBS N Sports</a> </li> <li class="common-select-list"> <a href="http://www.kbsn.co.kr/index" target="_blank" class="common-select-link" aria-label="KBS Joy 링크">KBS Joy</a> </li> </ul> </div> <div class="footer-common-select"> <button type="button" class="footer-select-btn left-border-delete" aria-label="KBS WORLD 사이트 메뉴 펼침 버튼"> <span class="btn-txt">KBS WORLD</span> <span class="arrow"></span> </button> <ul class="common-select-links"> <li class="common-select-list"> <a href="https://english.kbs.co.kr/" target="_blank" class="common-select-link" aria-label="Global 링크">Global</a> </li> <li class="common-select-list"> <a href="https://world.kbs.co.kr" target="_blank" class="common-select-link" aria-label="KBS WORLD 링크">KBS WORLD</a> </li> </ul> </div> </div> </div> </div> <div class="footer-address-copyright-wrapper"> <div class="footer-address-copyright"> <address class="footer-address"> KBS / 07235 서울특별시 영등포구 여의공원로 13(여의도동) / 대표전화 02-781-1000 / 기사배열 책임자, 청소년보호책임자 : 정철웅 <br/> KBS뉴스 인터넷 서비스 / 서울특별시 마포구 매봉산로 45 KBS미디어센터 / 시청자상담실 02-781-1000 / 등록번호 서울 자00297 (2010년 6월 23일) </address> <p class="footer-copyright">Copyright ⓒ KBS. All rights reserved. 무단 전재, 재배포 및 이용(AI 학습 포함) 금지</p> </div> </div> <button type="button" class="top-btn" aria-label="맨위로 이동 버튼"></button> <button type="button" class="aside-toggle-button" aria-label="aside 토글 버튼"></button> <aside class="aside" style="display: none"> <ul class="aside-btns"> <li class="aside-btns-list aside-comment"> <button type="button" class="comment-btn common-btn" onclick="location.href='#msg'" aria-label="댓글 버튼"> <span class="comment-icon"></span> <span class="common-btn-txt">0</span> </button> </li> <li class="aside-btns-list aside-like"> <button type="button" class="like-btn common-btn" aria-label="좋아요 펼침 버튼"> <span class="like-icon"></span> <span class="common-btn-txt">0</span> <span class="arrow-icon"></span> </button> <ul class="like-menu open-menu"> <li class="like-menu-list open-menu-list"> <button class="like-menu-btn open-menu-btn" type="button" onclick="javascript:addRecommend('4147650', '1')" aria-label="좋아요 버튼"> <span class="like-icon"></span> <span class="title">좋아요</span> </button> </li> <li class="like-menu-list open-menu-list"> <button class="like-menu-btn open-menu-btn" type="button" onclick="javascript:addRecommend('4147650', '2')" aria-label="응원해요 버튼"> <span class="cheer-icon"></span> <span class="title">응원해요</span> </button> </li> <li class="like-menu-list open-menu-list"> <button class="like-menu-btn open-menu-btn" type="button" onclick="javascript:addRecommend('4147650', '3')" aria-label="후속 원해요 버튼"> <span class="want-icon"></span> <span class="title">후속 원해요</span> </button> </li> </ul> </li> <li class="share-btn-wrapper aside-btns-list aside-share"> <button type="button" class="share-btn common-btn" aria-label="공유 버튼"> <span class="share-icon"></span> <span class="common-btn-txt">공유</span> </button> </li> <li class="aside-btns-list aside-copy"> <button type="button" class="copy-btn common-btn" onclick="printSection();" aria-label="인쇄 버튼"> <span class="copy-icon"></span> <span class="common-btn-txt">인쇄</span> </button> </li> <li class="txt-btn-wrapper aside-btns-list aside-txt"> <button type="button" class="txt-btn common-btn" aria-label="글꼴 버튼"> <div class="txt-icon-wrapper"> <span class="txt-icon normal"></span> </div> <span class="common-btn-txt">기본</span> <span class="arrow-icon"></span> </button> <ul class="txt-menu open-menu"> <li class="txt-menu-list open-menu-list"> <button class="txt-menu-btn large open-menu-btn" type="button" aria-label="글꼴 확대 버튼"> <div class="txt-icon-wrapper"> <span class="txt-icon large"></span> </div> <span class="title">확대</span> </button> </li> <li class="txt-menu-list open-menu-list"> <button class="txt-menu-btn normal open-menu-btn" type="button" aria-label="글꼴 기본 버튼"> <div class="txt-icon-wrapper"> <span class="txt-icon normal"></span> </div> <span class="title">기본</span> </button> </li> <li class="txt-menu-list open-menu-list"> <button class="txt-menu-btn small open-menu-btn" type="button" aria-label="글꼴 축소 버튼"> <div class="txt-icon-wrapper"> <span class="txt-icon small"></span> </div> <span class="title">축소</span> </button> </li> </ul> </li> <li class="dark-btn-wrapper aside-btns-list aside-dark"> <button type="button" class="dark-btn common-btn" aria-label="다크모드 버튼"> <span class="dark-icon"></span> <span class="common-btn-txt">다크<br />모드</span> </button> </li> </ul> </aside> <script type="text/javascript"> var textSize = 'normal'; var darkMode = 'false'; var isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; $(function () { if (navigator.cookieEnabled) { if (typeof localStorage !== "undefined" && localStorage.getItem("text-size") !== null) { textSize = localStorage.getItem("text-size"); } if (typeof localStorage !== "undefined" && localStorage.getItem("dark-mode") !== null) { darkMode = localStorage.getItem("dark-mode"); } } var $txtIcon = document.querySelector(".aside-btns-list .txt-btn .txt-icon"); var $btnTxt = document.querySelector(".aside-btns-list .txt-btn .common-btn-txt"); var $menu = document.querySelector(".aside-btns-list .txt-menu"); if (textSize == 'large'){ $("body").find("*").not(".player-app, .player-app *, #header, #header *, #footer, #footer *, .aisde, .aside *, .header-live-wrapper, .header-live-wrapper *").each(function () { $(this).css("font-size", ""); var size = Number($(this).css("font-size").replace("px", "")) + 1; if (size > 1) { $(this).css("font-size", size + "px"); } }); $txtIcon.className = "txt-icon large"; $btnTxt.innerText = "확대"; $menu.classList.remove("on"); } else if (textSize == 'small'){ $("body").find("*").not(".player-app, .player-app *, #header, #header *, #footer, #footer *, .aisde, .aside *, .header-live-wrapper, .header-live-wrapper *").each(function () { $(this).css("font-size", ""); var size = Number($(this).css("font-size").replace("px", "")) - 1; $(this).css("font-size", size + "px"); }); $txtIcon.className = "txt-icon small"; $btnTxt.innerText = "축소"; $menu.classList.remove("on"); } else { $("body").find("*").not(".player-app, .player-app *, #header, #header *, #footer, #footer *, .aisde, .aside *, .header-live-wrapper, .header-live-wrapper *").each(function () { $(this).css("font-size", ""); }); $txtIcon.className = "txt-icon normal"; $btnTxt.innerText = "기본"; $menu.classList.remove("on"); } var _$btnTxt = document.querySelector(".dark-btn .common-btn-txt"); if (_$btnTxt) { if (darkMode == 'true') { _$btnTxt.innerHTML = "\uB77C\uC774\uD2B8<br />\uBAA8\uB4DC"; } else if (darkMode == 'false') { _$btnTxt.innerHTML = "\uB2E4\uD06C<br />\uBAA8\uB4DC"; } else { if (isDarkMode) { _$btnTxt.innerHTML = "\uB77C\uC774\uD2B8<br />\uBAA8\uB4DC"; } else { _$btnTxt.innerHTML = "\uB2E4\uD06C<br />\uBAA8\uB4DC"; } } } }) window.addEventListener('load', function() { window.scrollBy(0, -1); }); </script> <div class="share-menu"> <div class="title-wrapper"> <p class="title">공유하기</p> <button type="button" class="close-btn"></button> </div> <div class="share-links-copy"> <ul class="share-links"> <li class="share-links-list"> <button type="button" class="share-link share-facebook"> <span class="share-icon facebook-icon"></span> <span class="txt">페이스북</span> </button> </li> <li class="share-links-list"> <button type="button" class="share-link share-twitter"> <span class="share-icon twitter-icon"></span> <span class="txt">트위터</span> </button> </li> <li class="share-links-list"> <button type="button" class="share-link share-kakao"> <span class="share-icon kakao-icon"></span> <span class="txt">카카오톡</span> </button> </li> <li class="share-links-list"> <button type="button" class="share-link share-kakao-story"> <span class="share-icon story-icon"></span> <span class="txt">카카오스토리</span> </button> </li> <li class="share-links-list"> <button type="button" class="share-link share-naver"> <span class="share-icon blog-icon"></span> <span class="txt">네이버블로그</span> </button> </li> <li class="share-links-list"> <button type="button" class="share-link share-naver-band"> <span class="share-icon band-icon"></span> <span class="txt">네이버밴드</span> </button> </li> </ul> <div class="copy-input"> <input readonly type="text" class="input" value=""/> <button type="button" class="copy-btn">링크복사</button> </div> </div> </div> <script type="text/javascript"> var currentUrl = window.location.href; var encodedCurrentUrl = encodeURIComponent(currentUrl); $(function () { Kakao.init('d57b7eca9db04c5ccd91e4d309ce0288'); $('.share-links-copy .copy-input input').val(currentUrl); $('.share-links-copy .share-facebook').off('click').on('click', function() { var shareUrl = 'https://www.facebook.com/sharer/sharer.php?u=' + encodedCurrentUrl; openPopup(shareUrl); }); $('.share-links-copy .share-twitter').off('click').on('click', function() { var shareUrl = "https://twitter.com/intent/tweet?url=" + encodedCurrentUrl; openPopup(shareUrl); }); $('.share-links-copy .share-kakao').off('click').on('click', function() { var shareDesc = document.getElementById('facebook_desc').getAttribute('content'); var shareImg = document.getElementById('facebook_img').getAttribute('content'); var mShareUrl = currentUrl; Kakao.Link.sendDefault({ objectType:"feed" , content : { title: "KBS News" // 콘텐츠의 타이틀 , description: shareDesc // 콘텐츠 상세설명 , imageUrl: shareImg // 썸네일 이미지 , link : { webUrl:currentUrl, // 모바일 카카오톡에서 사용하는 웹 링크 URL } } , buttons: [ { title: '웹으로 이동', link: { mobileWebUrl: mShareUrl, webUrl: currentUrl }, }, ], }); //sendDefualt }); $('.share-links-copy .share-kakao-story').off('click').on('click', function() { var origin = currentUrl.match(/^(https?:\/\/[^/]+)/)[1]; var shareUrl = "https://story.kakao.com/s/share?url=" + currentUrl + "&kakao_agent=sdk%2F1.43.1%20os%2Fjavascript%20sdk_type%2Fjavascript%20lang%2Fko-KR%20device%2FWin32%20origin%2F" + origin + "&app_key=d57b7eca9db04c5ccd91e4d309ce0288"; openPopup(shareUrl); }); $('.share-links-copy .share-naver').off('click').on('click', function() { var shareUrl = 'http://blog.naver.com/openapi/share?url=' + encodedCurrentUrl + '&title='; openPopup(shareUrl); }); $('.share-links-copy .share-naver-band').off('click').on('click', function() { var shareUrl = "https://band.us/plugin/share?body=" + encodedCurrentUrl + "&route=" + encodedCurrentUrl; openPopup(shareUrl); }); $('.share-links-copy .copy-input button').off('click').on('click', function() { copyToClipboard(currentUrl); }); }) function openPopup(url) { var windowFeatures = 'width=600,height=400,menubar=no,location=no,resizable=yes,scrollbars=no,status=no'; window.open(url, '_blank', windowFeatures); } function copyToClipboard(text) { var textarea = document.createElement("textarea"); textarea.textContent = text; textarea.style.position = "fixed"; // Prevent scrolling to bottom of page in MS Edge. document.body.appendChild(textarea); textarea.select(); try { document.execCommand("copy") alert('링크가 복사되었습니다.'); return true; // Security exception may be thrown by some browsers. } catch (ex) { console.warn("Copy to clipboard failed.", ex); return false; } finally { document.body.removeChild(textarea); } } </script> </footer> <div class="dim"></div> </div> </div> <div class="summary-popup common-popup"> <div class="popup-title"> <p class="title">요약내용</p> <button type="button" class="close-btn"></button> </div> <div class="popup-contents"> <p class="summary-content"></p> <p class="summary-desc"> 요약 내용은 네이버 및 OpenAI 社의 AI 서비스를 통해 제공하고 있습니다.<br> 기사의 내용을 올바르게 이해하기 위해서는 본문을 함께 읽어야 합니다. </p> </div> </div> <script> $(function () { var aiSummary = ""; aiSummary = aiSummary.split("\n").join("<br /><br />"); $('.summary-popup .summary-content').html(aiSummary); }) </script> <!-- 동영상 퍼가기 팝업 --> <div class="video-embed-popup common-popup"> <div class="popup-title"> <p class="title">동영상 퍼가기</p> <button type="button" class="close-btn"></button> </div> <div class="popup-contents"> <p class="embed-text summary-content common-text"></p> <div class="bottom-text-wrapper"> <p class="common-sub-text"> KBS 뉴스 사이트 동영상을 퍼가면 KBS 뉴스의 서비스<br> 이용정책에 동의하는 것으로 간주합니다. </p> <button type="button" class="copy-button">복사</button> </div> </div> </div> <script> $(function () { // 닫기 버튼 $('.video-embed-popup .close-btn').click(function() { $('.video-embed-popup').removeClass('on'); $('.dim').removeClass('on'); $('.body').removeClass('on'); $('.header-nav-wrapper').removeClass('index-change'); }); // 복사 버튼 $('.video-embed-popup .copy-button').click(function() { var $copyText = $('.video-embed-popup .embed-text'); var $temp = $("<textarea>"); $("body").append($temp); $temp.val($copyText.text()).select(); try { document.execCommand('copy'); alert('복사되었습니다.'); } catch (err) { console.error('오류가 발생하였습ㄴ니다.', err); } $temp.remove(); }); var $dim = document.querySelector(".dim"); // 나머지 처리는 이미 작동 if ($dim) { $dim.addEventListener("click", function () { $('.video-embed-popup').removeClass('on'); }); } }); </script> <style> .embed-text { word-wrap: break-word; } </style> <!-- 기사뷰 정보 추가 : SEO --> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "NewsArticle", "@id": "https://news.kbs.co.kr/news/view.do?ncd=4147650", "mainEntityOfPage":{ "@type":"WebPage", "@id":"https://news.kbs.co.kr/news/view.do?ncd=4147650" }, "headline": "2019 북미정상회담 [16시 뉴스특보]", // substringAndInsert (convertHtmlToText list.data.newsContents) 100 '...' "description": "", "image": { "@type": "ImageObject", "@id": "https://news.kbs.co.kr/data/news/2019/02/27/4147650_40.jpg", "url": "https://news.kbs.co.kr/data/news/2019/02/27/4147650_40.jpg", "height": 422, "width": 750 }, "datePublished": "2019-02-27 15:55:05", "dateModified": "2019-02-27 17:22:59", "publisher": { "@type": "Organization", "@id": "https://news.kbs.co.kr", "name": "KBS뉴스", "logo": { "@type": "ImageObject", "url": "https://news.kbs.co.kr/resources/images/v1/common/logo-icon-300.png", "width": 160 }, "sameAs":["https://www.youtube.com/c/newskbs", "https://www.facebook.com/kbsnews","https://twitter.com/KBSnews"] } } </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10