PageSourceSearch

https://tabtalk.co.kr/kakao-channel.js

js tabtalk.co.kr collected 2026-10-02 01:59:18 UTC 2,150 bytes, 54 lines download raw bytes

1/**
2 * 카카오톡 채널 추가 버튼 — 랜딩 헤더의 #kakaoChannelBtn.
3 *
4 * 앱키(window.KAKAO_JS_KEY, /api/kakao-config가 런타임에 주입)가 있으면
5 * 현재 페이지에서 SDK 팝업으로 바로 추가한다. 앱키가 없거나 SDK 로드/초기화가
6 * 실패하면 카카오 채널 홈(pf.kakao.com)을 새 창으로 연다 — 어느 경우에도 버튼이 동작한다.
7 *
8 * 채널 ID(_lhxcfX)는 공개 정보(채널 URL에 그대로 노출)라 여기 둔다.
9 */
10(function () {
11  // GA 이벤트 — GTM dataLayer로 직접 쏜다. ttTrack(홈 인라인)에 기대면
12  // 그 함수가 없는 페이지(앱·집중 가이드·개인정보)에서 이벤트가 조용히 유실된다.
13  function ttPush(name, params) {
14    try {
15      (window.dataLayer = window.dataLayer || []).push(Object.assign({ event: name }, params || {}));
16    } catch (_) {}
17  }
18  var CHANNEL_ID = "_lhxcfX";
19  var btn = document.getElementById("kakaoChannelBtn");
20  if (!btn) return;
21
22  function openChannelHome() {
23    window.open("https://pf.kakao.com/" + CHANNEL_ID, "_blank", "noopener");
24  }
25
26  // 앱키가 있으면 SDK를 초기화해 둔다(한 번만). 실패해도 폴백이 있으니 조용히 넘어간다.
27  var sdkReady = false;
28  var key = window.KAKAO_JS_KEY;
29  if (key && window.Kakao) {
30    try {
31      if (!window.Kakao.isInitialized()) window.Kakao.init(key);
32      sdkReady = window.Kakao.isInitialized();
33    } catch (e) {
34      sdkReady = false;
35    }
36  }
37
38  btn.addEventListener("click", function () {
39    ttPush("kakao_channel_add");
40    // SDK 2.8.1의 채널 추가는 followChannel. 앱키가 있고 SDK가 뜨면 그 자리에서 추가하고,
41    // 실패하거나 앱키가 없으면 채널 홈으로 폴백한다.
42    if (sdkReady && window.Kakao && window.Kakao.Channel && window.Kakao.Channel.followChannel) {
43      try {
44        window.Kakao.Channel.followChannel({ channelPublicId: CHANNEL_ID }).catch(function () {
45          openChannelHome();
46        });
47        return;
48      } catch (e) {
49        // SDK 호출이 막히면 링크로 이어서 폴백
50      }
51    }
52    openChannelHome();
53  });
54})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.