It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: https://caribou.travel/post/osaka-kyoto-nagoya-mount-tate-wisteria-10-days-itinerary

  1. <!DOCTYPE html><!-- Last Published: Fri Nov 15 2024 02:01:03 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="caribou.travel" data-wf-page="64d1f8d7c8eb554aa7393f27" data-wf-site="64d1f8d7c8eb554aa7393f33" lang="zh-HK" data-wf-collection="64d1f8d7c8eb554aa7393fae" data-wf-item-slug="osaka-kyoto-nagoya-mount-tate-wisteria-10-days-itinerary"><head><meta charset="utf-8"/><title>大阪+京都+名古屋+立山 紫藤花10天行程|Caribou Travel - 你的一對一旅遊預訂助手 - 輕鬆預訂 郵輪假期|精品酒店</title><link rel="alternate" hrefLang="x-default" href="https://caribou.travel/post/osaka-kyoto-nagoya-mount-tate-wisteria-10-days-itinerary"/><link rel="alternate" hrefLang="zh-HK" href="https://caribou.travel/post/osaka-kyoto-nagoya-mount-tate-wisteria-10-days-itinerary"/><link rel="alternate" hrefLang="en" href="https://caribou.travel/en/post/osaka-kyoto-nagoya-mount-tate-wisteria-10-days-itinerary"/><meta content="大阪+京都+名古屋+立山 紫藤花10天行程 Day 1Arrive at Airport* 買ICOCA卡+HARUKA折扣券 (Booked)‍紫藤第一站:鳥羽水環境保全中心午餐 @ 中村藤吉本店 宇治本店紫藤第二站:宇治平等院‍お抹茶体験 @ 中村藤吉本店 宇治本店・茶室『瑞松庵(ずいしょうあん)』 預約:http://www.tokichi.jp/stores/hikicha.html‍‍下午茶 @ 福寿園宇治工房京都北山(KYOTO TOWER SANDO 1 階南側)KATO(京都駅店9/F)‍Dinner @キムカツ 大阪松竹座預約:http://www.kimukatsu.com‍Day 2早餐 @ 黑門市場紫藤第三站:春日大社萬葉植物園‍午餐 @ 九州らーめん亀王 梅田総本店‍梅田購物Yodobashi (http://www.yodobashi-umeda.com/index.html)Disney StoreKiddy LandPokemon Center 大丸梅田店 (http://www.pokemon.co.jp/gp/pokecen/osaka/)‍日本橋電電城睇玩具Super Kids LandVolksPopondetta‍晚餐 @ かに道楽 道頓堀本店預約:http://douraku.co.jp/ ‍Day 3大阪環球影城(USJ)衝入場㩒Harry Porter飛モンスターバンター.ザ.リアル進撃巨人ザ.リアル 4-D : 2エヴァンゲ リオンリドゴジラ.ザ.リアル 4-D‍晚餐 @ 炭火焼き鳥えんや - 難波3号店預約:http://enya-food.jp ‍Day 4早餐 @ 海鮮丼専門店 木津 魚市食堂午餐 @ ヨーロッパ軒 幾久店鬱金香博覽會 @ 礪波鬱金香公園Dinner @ 柿の匠‍Day 5出發上立山晚餐 @富山 「白えび亭」‍Day 6踩Rail Motorbike午餐 @ 自家焙煎珈琲あすなろ(Cafe ASUNARO)Check in @ 旅館 飛騨牛の宿‍Day 7《你的名字》聖地遊飛驒古川站氣多若宮神社飛驒山王日枝神社‍午餐 @ 高山老街飛驒牛壽司飛騳牛串燒飛驒牛薯餅晚餐 @ 世界の山ちゃん 名古屋駅東店預約:http://www.yamachan.co.jp/ ‍Day 8早餐 @ 天むす千寿 近鉄名古屋駅構内店 (外賣炸蝦飯糰)紫藤第四站:曼陀羅寺公園午餐 @ 矢場とん 名古屋駅名鉄店名古屋駅名鉄百貨店本館9階長島Outlet購物晚餐 @ にぎりの徳兵衛 迴轉壽司 Oasis 21店‍Day 9名古屋LEGOLAND*坐LEGOLAND Train (http://www.aonamiline.co.jp/cgi/index.asp)リニア・鉄道館‍晚餐@松阪牛焼肉 一升びん 名古屋ラシック店預約:http://www.isshobin.com/ ‍Day 10午餐 @ まるや本店 名駅店 (鰻魚飯三吃) 名古屋駅名鉄百貨店本館9階Shopping最後衝刺‍" name="description"/><meta content="大阪+京都+名古屋+立山 紫藤花10天行程|Caribou Travel - 你的一對一旅遊預訂助手 - 輕鬆預訂 郵輪假期|精品酒店" property="og:title"/><meta content="大阪+京都+名古屋+立山 紫藤花10天行程 Day 1Arrive at Airport* 買ICOCA卡+HARUKA折扣券 (Booked)‍紫藤第一站:鳥羽水環境保全中心午餐 @ 中村藤吉本店 宇治本店紫藤第二站:宇治平等院‍お抹茶体験 @ 中村藤吉本店 宇治本店・茶室『瑞松庵(ずいしょうあん)』 預約:http://www.tokichi.jp/stores/hikicha.html‍‍下午茶 @ 福寿園宇治工房京都北山(KYOTO TOWER SANDO 1 階南側)KATO(京都駅店9/F)‍Dinner @キムカツ 大阪松竹座預約:http://www.kimukatsu.com‍Day 2早餐 @ 黑門市場紫藤第三站:春日大社萬葉植物園‍午餐 @ 九州らーめん亀王 梅田総本店‍梅田購物Yodobashi (http://www.yodobashi-umeda.com/index.html)Disney StoreKiddy LandPokemon Center 大丸梅田店 (http://www.pokemon.co.jp/gp/pokecen/osaka/)‍日本橋電電城睇玩具Super Kids LandVolksPopondetta‍晚餐 @ かに道楽 道頓堀本店預約:http://douraku.co.jp/ ‍Day 3大阪環球影城(USJ)衝入場㩒Harry Porter飛モンスターバンター.ザ.リアル進撃巨人ザ.リアル 4-D : 2エヴァンゲ リオンリドゴジラ.ザ.リアル 4-D‍晚餐 @ 炭火焼き鳥えんや - 難波3号店預約:http://enya-food.jp ‍Day 4早餐 @ 海鮮丼専門店 木津 魚市食堂午餐 @ ヨーロッパ軒 幾久店鬱金香博覽會 @ 礪波鬱金香公園Dinner @ 柿の匠‍Day 5出發上立山晚餐 @富山 「白えび亭」‍Day 6踩Rail Motorbike午餐 @ 自家焙煎珈琲あすなろ(Cafe ASUNARO)Check in @ 旅館 飛騨牛の宿‍Day 7《你的名字》聖地遊飛驒古川站氣多若宮神社飛驒山王日枝神社‍午餐 @ 高山老街飛驒牛壽司飛騳牛串燒飛驒牛薯餅晚餐 @ 世界の山ちゃん 名古屋駅東店預約:http://www.yamachan.co.jp/ ‍Day 8早餐 @ 天むす千寿 近鉄名古屋駅構内店 (外賣炸蝦飯糰)紫藤第四站:曼陀羅寺公園午餐 @ 矢場とん 名古屋駅名鉄店名古屋駅名鉄百貨店本館9階長島Outlet購物晚餐 @ にぎりの徳兵衛 迴轉壽司 Oasis 21店‍Day 9名古屋LEGOLAND*坐LEGOLAND Train (http://www.aonamiline.co.jp/cgi/index.asp)リニア・鉄道館‍晚餐@松阪牛焼肉 一升びん 名古屋ラシック店預約:http://www.isshobin.com/ ‍Day 10午餐 @ まるや本店 名駅店 (鰻魚飯三吃) 名古屋駅名鉄百貨店本館9階Shopping最後衝刺‍" property="og:description"/><meta content="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f39/64d1f8d7c8eb554aa739406a_Cover.webp" property="og:image"/><meta content="大阪+京都+名古屋+立山 紫藤花10天行程|Caribou Travel - 你的一對一旅遊預訂助手 - 輕鬆預訂 郵輪假期|精品酒店" property="twitter:title"/><meta content="大阪+京都+名古屋+立山 紫藤花10天行程 Day 1Arrive at Airport* 買ICOCA卡+HARUKA折扣券 (Booked)‍紫藤第一站:鳥羽水環境保全中心午餐 @ 中村藤吉本店 宇治本店紫藤第二站:宇治平等院‍お抹茶体験 @ 中村藤吉本店 宇治本店・茶室『瑞松庵(ずいしょうあん)』 預約:http://www.tokichi.jp/stores/hikicha.html‍‍下午茶 @ 福寿園宇治工房京都北山(KYOTO TOWER SANDO 1 階南側)KATO(京都駅店9/F)‍Dinner @キムカツ 大阪松竹座預約:http://www.kimukatsu.com‍Day 2早餐 @ 黑門市場紫藤第三站:春日大社萬葉植物園‍午餐 @ 九州らーめん亀王 梅田総本店‍梅田購物Yodobashi (http://www.yodobashi-umeda.com/index.html)Disney StoreKiddy LandPokemon Center 大丸梅田店 (http://www.pokemon.co.jp/gp/pokecen/osaka/)‍日本橋電電城睇玩具Super Kids LandVolksPopondetta‍晚餐 @ かに道楽 道頓堀本店預約:http://douraku.co.jp/ ‍Day 3大阪環球影城(USJ)衝入場㩒Harry Porter飛モンスターバンター.ザ.リアル進撃巨人ザ.リアル 4-D : 2エヴァンゲ リオンリドゴジラ.ザ.リアル 4-D‍晚餐 @ 炭火焼き鳥えんや - 難波3号店預約:http://enya-food.jp ‍Day 4早餐 @ 海鮮丼専門店 木津 魚市食堂午餐 @ ヨーロッパ軒 幾久店鬱金香博覽會 @ 礪波鬱金香公園Dinner @ 柿の匠‍Day 5出發上立山晚餐 @富山 「白えび亭」‍Day 6踩Rail Motorbike午餐 @ 自家焙煎珈琲あすなろ(Cafe ASUNARO)Check in @ 旅館 飛騨牛の宿‍Day 7《你的名字》聖地遊飛驒古川站氣多若宮神社飛驒山王日枝神社‍午餐 @ 高山老街飛驒牛壽司飛騳牛串燒飛驒牛薯餅晚餐 @ 世界の山ちゃん 名古屋駅東店預約:http://www.yamachan.co.jp/ ‍Day 8早餐 @ 天むす千寿 近鉄名古屋駅構内店 (外賣炸蝦飯糰)紫藤第四站:曼陀羅寺公園午餐 @ 矢場とん 名古屋駅名鉄店名古屋駅名鉄百貨店本館9階長島Outlet購物晚餐 @ にぎりの徳兵衛 迴轉壽司 Oasis 21店‍Day 9名古屋LEGOLAND*坐LEGOLAND Train (http://www.aonamiline.co.jp/cgi/index.asp)リニア・鉄道館‍晚餐@松阪牛焼肉 一升びん 名古屋ラシック店預約:http://www.isshobin.com/ ‍Day 10午餐 @ まるや本店 名駅店 (鰻魚飯三吃) 名古屋駅名鉄百貨店本館9階Shopping最後衝刺‍" property="twitter:description"/><meta content="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f39/64d1f8d7c8eb554aa739406a_Cover.webp" property="twitter:image"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><link href="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/css/caribou-staging.webflow.e3a9457ca.min.css" rel="stylesheet" type="text/css"/><link href="https://fonts.googleapis.com" rel="preconnect"/><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"/><script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script><script type="text/javascript">WebFont.load({  google: {    families: ["Noto Sans HK:regular,500,700","Poppins:regular,500,600,700","Manrope:regular,500,600,700"]  }});</script><script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script><link href="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f7a_Favicon.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f7b_Webclip.png" rel="apple-touch-icon"/><!-- Google Tag Manager -->
  2. <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
  3. new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
  4. j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
  5. 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
  6. })(window,document,'script','dataLayer','GTM-WKGC5B3');</script>
  7. <!-- End Google Tag Manager -->
  8.  
  9. <meta name="agd-partner-manual-verification" />
  10.  
  11.  
  12. <!-- Meta Pixel Code -->
  13. <script>
  14. !function(f,b,e,v,n,t,s)
  15. {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  16. n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  17. if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  18. n.queue=[];t=b.createElement(e);t.async=!0;
  19. t.src=v;s=b.getElementsByTagName(e)[0];
  20. s.parentNode.insertBefore(t,s)}(window, document,'script',
  21. 'https://connect.facebook.net/en_US/fbevents.js');
  22. fbq('init', '921638962188869');
  23.  
  24. </script>
  25. <noscript><img height="1" width="1" style="display:none"
  26. src="https://www.facebook.com/tr?id=921638962188869&ev=PageView&noscript=1"
  27. /></noscript>
  28. <!-- End Meta Pixel Code -->
  29.  
  30.  
  31. <!-- Custom Google Ad Tracking -->
  32. <script>
  33. function setCookie(name, value, days) {
  34.  var expires = "";
  35.  if (days) {
  36.    var date = new Date();
  37.    date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); // Set expiry to 30 days
  38.    expires = "; expires=" + date.toUTCString();
  39.  }
  40.  document.cookie =
  41.    name + "=" + encodeURIComponent(value || "") + expires + "; path=/";
  42. }
  43.  
  44. // Utility Functions
  45. function getCookie(name) {
  46.  var nameEQ = name + "=";
  47.  var ca = document.cookie.split(";");
  48.  for (var i = 0; i < ca.length; i++) {
  49.    var c = ca[i];
  50.    while (c.charAt(0) == " ") c = c.substring(1, c.length);
  51.    if (c.indexOf(nameEQ) == 0) {
  52.      var cookieValue = c.substring(nameEQ.length, c.length);
  53.      return decodeURIComponent(cookieValue);
  54.    }
  55.  }
  56.  return null;
  57. }
  58.  
  59. function getClientId() {
  60.  var gaCookie = getCookie("_ga");
  61.  if (gaCookie) {
  62.    var parts = gaCookie.split(".");
  63.    if (parts.length >= 4) {
  64.      return parts[2] + "." + parts[3];
  65.    }
  66.  }
  67.  return "";
  68. }
  69.  
  70. function getSessionId() {
  71.  var gaSessionCookie = getCookie("_ga_F643X6TL3D");
  72.  if (gaSessionCookie) {
  73.    var parts = gaSessionCookie.split(".");
  74.    if (parts.length >= 2) {
  75.      return parts[2];
  76.    }
  77.  }
  78.  return "";
  79. }
  80.  
  81.  
  82. function triggerCustomDataReady(){
  83.  // Push the fetched data and a custom event to the dataLayer
  84.  dataLayer.push({
  85.    'event': 'data_ready',  // Custom event name
  86.  });
  87.  
  88.  fbq('track', 'PageView');
  89. }
  90.  
  91.  
  92. async function fetchHashId(hashObject) {
  93.  try {
  94.    // Skip hashing for empty object
  95.    if (!hashObject || Object.keys(hashObject).length === 0) {
  96.      return;
  97.    }
  98.    
  99.    const response = await fetch(
  100.      "https://hub.caribou.travel/api/hash",
  101.      {
  102.        method: "POST",
  103.        headers: {
  104.          "Content-Type": "application/json",
  105.          "Caribou-Token": "76776d2b7be55bac4de727bec1030657",
  106.        },
  107.        body: JSON.stringify(hashObject),
  108.      }
  109.    );
  110.  
  111.    const data = await response.json();
  112.    if (response.ok && data) {
  113.      var hashID = data.uuid;
  114.      setCookie("caribou_hashID", hashID, 30);
  115.    } else {
  116.      setCookie("caribou_hashID", '(no hashID)', 30);
  117.      console.error("API error or invalid response");
  118.    }
  119.  } catch (error) {
  120.    console.error("Error: ", error);
  121.  }
  122. }
  123.  
  124.  
  125. var urlParams = new URLSearchParams(window.location.search);
  126. var keys = [
  127.  "adUID",
  128.  "network",
  129.  "campaignid",
  130.  "campaign_id",
  131.  "adgroupid",
  132.  "adset_id",
  133.  "ad_id",
  134.  "device",
  135.  "creative",
  136.  "keyword",
  137.  "gclid",
  138.  'fbclid'
  139. ];
  140. var hasParams = keys.some((key) => urlParams.has(key));
  141. var adTracking = {}
  142.  
  143.  
  144. if (hasParams) {
  145.  adTracking = {
  146.    adUID: urlParams.get("adUID") || "(no value)",
  147.    network: urlParams.get("network") || "(no value)",
  148.    campaignid: urlParams.get("campaignid") || urlParams.get("campaign_id") || "(no value)", // Google: campaignid; Facebook: campaign_id
  149.    adgroupid: urlParams.get("adgroupid") || urlParams.get("adset_id") || "(no value)", // Google: adgroupid; Facebook: adset_id
  150.    adid: urlParams.get("ad_id") || "(no value)", // Google: /; Facebook: ad_id
  151.    device: urlParams.get("device") || "(no value)",
  152.    creative: urlParams.get("creative") || "(no value)",
  153.    keyword: urlParams.get("keyword") || "(no value)",
  154.    gclid: urlParams.get("gclid") || "(no value)",
  155.    fbclid: urlParams.get("fbclid") || "(no value)",
  156.    timestamp: new Date().toISOString(),
  157.  };
  158.  
  159.  // Get the existing adTracking cookie
  160.  var existingAdTracking = getCookie('adTracking') ? JSON.parse(getCookie('adTracking')) : null
  161.  
  162.  // Create copies of the adTracking objects without the timestamp
  163.  var currentAdTrackingNoTimestamp = { ...adTracking }
  164.  delete currentAdTrackingNoTimestamp.timestamp
  165.  
  166.  var existingAdTrackingNoTimestamp = existingAdTracking ? { ...existingAdTracking } : null
  167.  if ( existingAdTrackingNoTimestamp ) delete existingAdTrackingNoTimestamp.timestamp
  168.  
  169.  // Compare the existing adTracking cookie with the new one
  170.  if (!existingAdTrackingNoTimestamp || JSON.stringify(existingAdTrackingNoTimestamp) !== JSON.stringify(currentAdTrackingNoTimestamp)) {
  171.    setCookie("adTracking", JSON.stringify(adTracking), 30); // Store in a cookie for 30 days
  172.    setCookie("caribou_hashID", '(no_hashID)', 30) // Set the cookie 'caribou_hashID' so that it can request another hash
  173.  }
  174. }
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182. </script>
  183. <!-- End Custom Google Ad Tracking -->
  184.  
  185. <!-- Add the slick-theme.css if you want default styling -->
  186. <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css"/></head><body class="full-page-body"><section class="section post-section"><div class="wrapper"><div class="post-content-expert-wrapper post-content-expert-wrapper-mobile"><a href="/expert/matcha" class="back-button-wrapper back-button-wrapper-mobile w-inline-block"><img src="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f79_back.svg" loading="lazy" alt="" class="back-button-img"/></a><div style="background-image:url(&quot;https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f39/64d1f8d7c8eb554aa7394029_Matcha-min.webp&quot;)" class="post-content-expert-img"></div><div class="post-content-expert-info-wrapper"><div class="post-content-expert-name">Matcha</div><div class="post-content-location-wrapper"><img src="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f67_location-tag.svg" loading="lazy" alt="" class="post-content-location-icon"/><div class="post-content-location">關西.中部</div></div></div><a href="/" class="post-logo-desktop-wrapper w-inline-block"><img src="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f7f_Caribou-Logo-PostPage-Desktop.svg" loading="lazy" alt="" class="post-logo-desktop"/></a><a href="/" class="post-logo-mobile-wrapper w-inline-block"><img src="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f7e_Caribou-Logo-PostPage-Mobile.svg" loading="lazy" alt="" class="post-logo-mobile"/></a></div><div id="w-node-_8a07f710-c2b9-ab12-2202-00e9e93ef375-a7393f27" class="left"><div class="image-wrapper"><div class="post-media-img-wrapper"><div class="post-media-list-wrapper w-dyn-list"><script type="text/x-wf-template" id="wf-template-5215e31f-be9f-0d77-ceed-26cf06e85d49">%3Cdiv%20role%3D%22listitem%22%20class%3D%22post-media-list-item%20w-dyn-item%20w-dyn-repeater-item%22%3E%3Cdiv%20class%3D%22img-cover%22%3E%3C%2Fdiv%3E%3Cdiv%20style%3D%22background-image%3Aurl(%26quot%3Bhttps%3A%2F%2Fcdn.prod.website-files.com%2F64d1f8d7c8eb554aa7393f39%2F64d1f8d7c8eb554aa739406a_Cover.webp%26quot%3B)%22%20class%3D%22post-img%22%3E%3C%2Fdiv%3E%3C%2Fdiv%3E</script><div role="list" class="post-media-list w-dyn-items"><div role="listitem" class="post-media-list-item w-dyn-item w-dyn-repeater-item"><div class="img-cover"></div><div style="background-image:url(&quot;https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f39/64d1f8d7c8eb554aa739406a_Cover.webp&quot;)" class="post-img"></div></div><div role="listitem" class="post-media-list-item w-dyn-item w-dyn-repeater-item"><div class="img-cover"></div><div style="background-image:url(&quot;https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f39/64d1f8d7c8eb554aa739406b_1.webp&quot;)" class="post-img"></div></div><div role="listitem" class="post-media-list-item w-dyn-item w-dyn-repeater-item"><div class="img-cover"></div><div style="background-image:url(&quot;https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f39/64d1f8d7c8eb554aa739406c_2.webp&quot;)" class="post-img"></div></div></div><div class="w-dyn-hide w-dyn-empty"><div>No items found.</div></div></div><div class="slide-prev-wrapper"><div class="slick-prev"><div class="slide-left-arrow-icon"></div></div></div><div class="slide-next-wrapper"><div class="slick-next"><div class="slide-right-arrow-icon"></div></div></div></div></div></div><div id="w-node-_18483be0-5f44-7550-f6f5-cfce7ed70e0e-a7393f27" class="right"><div class="post-content-wrapper"><div class="post-content-expert-wrapper"><a style="background-image:url(&quot;https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f39/64d1f8d7c8eb554aa7394029_Matcha-min.webp&quot;)" href="/expert/matcha" class="post-content-expert-img w-inline-block"></a><div class="post-content-expert-info-wrapper"><a href="/expert/matcha" class="post-content-expert-name">Matcha</a><div class="post-content-location-wrapper"><img src="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f67_location-tag.svg" loading="lazy" alt="" class="post-content-location-icon"/><div class="post-content-location">關西.中部</div></div></div><a href="/" class="post-logo-desktop-wrapper w-inline-block"><img src="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f7f_Caribou-Logo-PostPage-Desktop.svg" loading="lazy" alt="" class="post-logo-desktop"/></a></div><div class="post-description-wrapper"><h1 class="post-content-heading">大阪+京都+名古屋+立山 紫藤花10天行程</h1><div class="post-meta-container"><div class="post-meta-wrapper"><div class="post-meta-header-wrapper"><img src="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f78_attractions.svg" loading="lazy" alt="" class="post-meta-header-img"/><div class="post-meta-header-heading">景點:</div></div><div id="attractions-list" class="post-meta-items-wrapper"><div class="post-meta-item">景點</div></div></div><div class="post-meta-wrapper"><div class="post-meta-header-wrapper"><img src="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f66_beach(24x24)%401x%201.svg" loading="lazy" alt="" class="post-meta-header-img"/><div class="post-meta-header-heading">活動:</div></div><div id="activities-list" class="post-meta-items-wrapper"><div class="post-meta-item">活動</div></div></div><div class="post-meta-wrapper"><div class="post-meta-header-wrapper"><img src="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f64_location(24x24)%401x%201.svg" loading="lazy" alt="" class="post-meta-header-img"/><div class="post-meta-header-heading">地點:</div></div><div id="locations-list" class="post-meta-items-wrapper"><div class="post-meta-item">地點</div></div></div></div><div class="post-description-content w-richtext"><p>Day 1</p><p>到達機場</p><p>*買ICOCA卡+HARUKA折扣券 (<a href="http://www.westjr.co.jp/global/tc/ticket/icoca-haruka/">Booked</a>)</p><p>‍</p><p>紫藤第一站:鳥羽水環境保全中心</p><p>午餐 @ 中村藤吉本店 宇治本店</p><p>紫藤第二站:宇治平等院</p><p>‍</p><p>お抹茶体験 @ 中村藤吉本店 宇治本店・茶室『瑞松庵(ずいしょうあん)』 </p><p>預約:<a href="http://www.tokichi.jp/stores/hikicha.html">http://www.tokichi.jp/stores/hikicha.html</a>‍</p><p>‍</p><p>下午茶 @ 福寿園宇治工房</p><p>京都北山(KYOTO TOWER SANDO 1 階南側)</p><p>KATO(京都駅店9/F)</p><p>‍<br/>Dinner @キムカツ 大阪松竹座</p><p>預約:http://www.kimukatsu.com</p><p>‍</p><p>Day 2</p><p>早餐 @ 黑門市場</p><p>紫藤第三站:春日大社萬葉植物園</p><p>‍<br/>午餐 @ 九州らーめん亀王 梅田総本店<br/></p><p>‍</p><p>梅田購物</p><ol start="" role="list"><li>Yodobashi (http://www.yodobashi-umeda.com/index.html)</li><li>Disney Store</li><li>Kiddy Land</li><li>Pokemon Center 大丸梅田店 (http://www.pokemon.co.jp/gp/pokecen/osaka/)</li></ol><p>‍</p><p>日本橋電電城睇玩具</p><ul role="list"><li>Super Kids Land</li><li>Volks</li><li>Popondetta</li></ul><p>‍</p><p>晚餐 @ かに道楽 道頓堀本店</p><p>預約:http://douraku.co.jp/ </p><p>‍</p><p>Day 3</p><p>大阪環球影城(USJ)</p><ul role="list"><li>衝入場㩒Harry Porter飛</li><li>モンスターバンター.ザ.リアル</li><li>進撃巨人ザ.リアル 4-D : 2</li><li>エヴァンゲ リオンリド</li><li>ゴジラ.ザ.リアル 4-D<br/></li></ul><p>‍</p><p>晚餐 @ 炭火焼き鳥えんや - 難波3号店</p><p>預約:http://enya-food.jp </p><p>‍</p><p>Day 4</p><p>早餐 @ 海鮮丼専門店 木津 魚市食堂</p><p>午餐 @ ヨーロッパ軒 幾久店<br/></p><p>鬱金香博覽會 @ 礪波鬱金香公園<br/></p><p>Dinner @ 柿の匠</p><p>‍</p><p>Day 5</p><p>出發上立山</p><p>晚餐 @富山 「白えび亭」</p><p>‍</p><p>Day 6</p><p>踩Rail Motorbike</p><p>午餐 @ 自家焙煎珈琲あすなろ(Cafe ASUNARO)<br/></p><p>Check in @ 旅館 飛騨牛の宿</p><p>‍</p><p>Day 7</p><p>《你的名字》聖地遊</p><ol start="" role="list"><li>飛驒古川站</li><li>氣多若宮神社</li><li>飛驒山王日枝神社<br/></li></ol><p>‍</p><p>午餐 @ 高山老街</p><ol start="" role="list"><li>飛驒牛壽司</li><li>飛騳牛串燒</li><li>飛驒牛薯餅</li></ol><p>晚餐 @ 世界の山ちゃん 名古屋駅東店</p><p>預約:http://www.yamachan.co.jp/ </p><p>‍</p><p>Day 8</p><p>早餐 @ 天むす千寿  近鉄名古屋駅構内店 (外賣炸蝦飯糰)</p><p>紫藤第四站:曼陀羅寺公園<br/></p><p>午餐 @ 矢場とん 名古屋駅名鉄店</p><p>名古屋駅名鉄百貨店本館9階</p><p>長島Outlet購物<br/></p><p>晚餐 @ にぎりの徳兵衛 迴轉壽司 Oasis 21店</p><p>‍</p><p>Day 9</p><p><br/>名古屋LEGOLAND</p><p>*坐LEGOLAND Train (http://www.aonamiline.co.jp/cgi/index.asp)</p><p>リニア・鉄道館</p><p>‍</p><p>晚餐@松阪牛焼肉 一升びん 名古屋ラシック店</p><p>預約:http://www.isshobin.com/ </p><p>‍</p><p>Day 10</p><p>午餐 @ まるや本店 名駅店 (鰻魚飯三吃) </p><p>名古屋駅名鉄百貨店本館9階</p><p>Shopping最後衝刺</p><p>‍</p></div></div><div class="post-button-wrapper"><a id="custom-submit-btn-desktop" href="#" target="_blank" class="btn btn-primary icon-button btn-post btn-post-whatsapp w-inline-block"><div style="background-image:url(&quot;https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f39/64d1f8d7c8eb554aa7394029_Matcha-min.webp&quot;)" class="btn-post-avatar"></div><div class="btn-post-text btn-post-text-desktop">Hi Caribou, 我想了解...</div></a><a href="#" class="btn btn-primary icon-button btn-post btn-post-product w-inline-block w-condition-invisible"><div style="background-image:url(&quot;https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f39/64d1f8d7c8eb554aa7394029_Matcha-min.webp&quot;)" class="btn-post-avatar"></div><div class="btn-post-text">查看旅遊體驗</div></a></div></div></div></div></section><div class="post-button-wrapper post-button-wrapper-mobile"><a id="custom-submit-btn-mobile" href="#" target="_blank" class="btn btn-primary icon-button btn-post btn-post-whatsapp w-inline-block"><div style="background-image:url(&quot;https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f39/64d1f8d7c8eb554aa7394029_Matcha-min.webp&quot;)" class="btn-post-avatar"></div><div class="btn-post-text btn-post-text-mobile">Hi Caribou, 我想了解</div></a><a href="#" class="btn btn-primary icon-button btn-post btn-post-product w-inline-block w-condition-invisible"><div style="background-image:url(&quot;https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f39/64d1f8d7c8eb554aa7394029_Matcha-min.webp&quot;)" class="btn-post-avatar"></div><div class="btn-post-text">查看旅遊體驗</div></a></div><div class="embed-css-slick w-embed"><style>
  187.  
  188. /* styling for the slider */
  189. .slick-dots {
  190. display: flex;
  191. justify-content: center;
  192. margin: 0;
  193. padding: 1rem 0;
  194. list-style-type: none;
  195. }
  196.  
  197. .slick-dots li {
  198. margin: 0 4px
  199. }
  200. .slick-dots button {
  201. display: block;
  202. width: 8px;
  203. height: 8px;
  204. padding: 0;
  205. border: none;
  206. border-radius: 100%;
  207. background-color: rgba(255, 255, 255, 0.5);;
  208. text-indent: -9999px;
  209. }
  210.  
  211. .slick-dots li.slick-active button {
  212. background-color: #FFFFFF;
  213. }
  214.  
  215.  
  216. </style></div><div class="embed-css-post-meta w-embed"><style>
  217.  
  218. /* styling for post meta collection list */
  219.  
  220. .post-meta-collection-item:after,
  221. .post-meta-item:after{
  222. content: ","
  223. }
  224.  
  225. .post-meta-collection-item:last-child:after,
  226. .post-meta-item:last-child:after {
  227. content: ""
  228. }
  229.  
  230. </style></div><div class="embed-css-post-desc w-embed"><style>
  231.  
  232. .post-description-wrapper {
  233.    -ms-overflow-style: none;  // IE 10+
  234.    overflow: -moz-scrollbars-none;  // Firefox
  235. }
  236.  
  237. .post-description-wrapper::-webkit-scrollbar {
  238.    display: none; // Safari and Chrome
  239. }
  240.  
  241. </style></div><div class="w-embed"><style>
  242.  
  243. .slick-current .img-cover {
  244. display:none;
  245. }
  246.  
  247.  
  248. </style></div><a href="/expert/matcha" class="back-button-wrapper w-inline-block"><img src="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/64d1f8d7c8eb554aa7393f79_back.svg" loading="lazy" alt="" class="back-button-img"/></a><div class="w-embed w-script"><script>
  249.  
  250. var aspectRatio = "3:4"
  251. var imageContainerWidthRatio;
  252. var imageWidthRatio;
  253.  
  254. // Update the aspect ratio css
  255. if (aspectRatio == "3:4") {
  256.  imageContainerWidthRatio = 0.75;
  257.  imageWidthRatio = 0.75;
  258.  updatePostImageAspectRatio("133%");
  259. } else if (aspectRatio == "9:16") {
  260.  imageContainerWidthRatio = 0.5625;
  261.  imageWidthRatio = 0.5625;
  262.  updatePostImageAspectRatio("178%");
  263. } else if (aspectRatio == "1:1") {
  264.  imageContainerWidthRatio = 1;
  265.  imageWidthRatio = 1;
  266.  updatePostImageAspectRatio("100%");
  267. } else if (aspectRatio == "4:3") {
  268.  imageContainerWidthRatio = 1; // Special handling
  269.  imageWidthRatio = 4 / 3;
  270.  updatePostImageAspectRatio("75%");
  271. } else if (aspectRatio == "16:9") {
  272.  imageContainerWidthRatio = 1; // Special handling
  273.  imageWidthRatio = 16 / 9;
  274.  updatePostImageAspectRatio("56.25%");
  275. } else {
  276.  imageContainerWidthRatio = 1;
  277.  imageWidthRatio = 1;
  278.  updatePostImageAspectRatio("100%");
  279. }
  280.  
  281. updateImageWrapperAspectRatio(imageWidthRatio);
  282.  
  283. function updateImageWrapperAspectRatio(aspectRatio) {
  284.  document.querySelector(".image-wrapper").style.aspectRatio = aspectRatio;
  285. }
  286.  
  287. function updatePostImageAspectRatio(aspectRatio) {
  288.  document.querySelectorAll(".post-img").forEach(function (el) {
  289.    el.style.paddingTop = aspectRatio;
  290.  });
  291. }
  292.  
  293. function resizeComponent(innerHeight) {
  294.  // Get the screen height
  295.  var maxheight = innerHeight - 80;
  296.  var imageMaxWidth = maxheight * imageContainerWidthRatio;
  297.  var calContentWidth = imageMaxWidth / (2 / 3) - imageMaxWidth;
  298.  var contentWidth;
  299.  
  300.  if (calContentWidth < 500) {
  301.    contentWidth = 500;
  302.  } else {
  303.    contentWidth = calContentWidth;
  304.  }
  305.  
  306.  var containerMaxWidth = imageMaxWidth + contentWidth;
  307.  
  308.  // adjust the max width
  309.  document.querySelector(".image-wrapper").style.maxWidth =
  310.    imageMaxWidth + "px";
  311.  document.querySelector(".wrapper").style.maxWidth = containerMaxWidth + "px";
  312.  document.querySelector(".right").style.width = contentWidth + "px";
  313.  
  314.  // Adjust the max height
  315.  document.querySelector(".post-content-wrapper").style.maxHeight =
  316.    maxheight + "px";
  317. }
  318.  
  319. if (window.innerWidth > 991) {
  320.  resizeComponent(window.innerHeight);
  321. }
  322.  
  323. window.addEventListener("resize", function () {
  324.  var height = window.innerHeight;
  325.  var width = window.innerWidth;
  326.  
  327.  if (width > 991) {
  328.    resizeComponent(height);
  329.  } else {
  330.    // adjust the max width
  331.    document.querySelector(".image-wrapper").style.maxWidth = "";
  332.    document.querySelector(".wrapper").style.maxWidth = "";
  333.    document.querySelector(".right").style.width = "";
  334.  
  335.    // Adjust the max height
  336.    document.querySelector(".post-content-wrapper").style.maxHeight = "";
  337.  }
  338. });
  339.  
  340.  
  341.  
  342.  
  343. </script></div><div class="embed-js-cta-button w-embed w-script"><script>
  344.  
  345. function getWebsiteLanguage(){
  346.  return window.location.pathname.includes("/en/") ? "en" : "zh-Hant-HK"
  347. }
  348.  
  349. function updatePostButton() {
  350.  
  351.  const websiteLanguage = getWebsiteLanguage()
  352.  
  353.  const btnPostTextDestkop = document.querySelector(".btn-post-text-desktop")
  354.  const btnPostTextMobile = document.querySelector(".btn-post-text-mobile")
  355.  
  356.  const btnPostDesktop = document.querySelector("#custom-submit-btn-desktop")
  357.  const btnPostMobile = document.querySelector("#custom-submit-btn-mobile")
  358.  
  359.  if (websiteLanguage == "en") {
  360.    btnPostTextDestkop.textContent = "Hi Matcha, I am interested to 紫藤花行程"
  361.    btnPostDesktop.href = "https://api.whatsapp.com/send/?phone=85262047460&text=Hi Matcha, I am interested to 紫藤花行程"
  362.  
  363.    btnPostTextMobile.textContent = "Hi Matcha, I am interested to 紫藤花行程"
  364.    btnPostMobile.href = "https://api.whatsapp.com/send/?phone=85262047460&text=Hi Matcha, I am interested to 紫藤花行程"
  365.  
  366.  } else {
  367.    btnPostTextDestkop.textContent = "Hi Matcha, 我想了解紫藤花行程"
  368.    btnPostDesktop.href = "https://api.whatsapp.com/send/?phone=85262047460&text=Hi Matcha, 我想了解紫藤花行程"
  369.  
  370.    btnPostTextMobile.textContent = "Hi Matcha, 我想了解紫藤花行程"
  371.    btnPostMobile.href = "https://api.whatsapp.com/send/?phone=85262047460&text=Hi Matcha, 我想了解紫藤花行程"
  372.  }
  373. }
  374.  
  375.  
  376. updatePostButton()
  377.  
  378. </script></div><div class="embed-js-post-meta w-embed w-script"><script>
  379.  
  380. function renderPostData(wrapperId, stringList){
  381.    if (stringList != ""){
  382.        // Select the list wrapper
  383.        const wrapper = document.querySelector(wrapperId)
  384.  
  385.        // Clear the list wrapper
  386.        wrapper.innerHTML = ""
  387.  
  388.        // Get the list and separate the list by comma
  389.        const list = stringList.split(/,\s?/);
  390.  
  391.        // Loop through each item and creates a text block
  392.        list.forEach(item =>  {
  393.            // Create new div for each location
  394.            const div = document.createElement("div")
  395.            div.classList.add("post-meta-item")
  396.  
  397.            // Set the text content to the div
  398.            div.textContent = item
  399.  
  400.            // Append it to the wrapper
  401.            wrapper.appendChild(div)
  402.        })
  403.    }
  404.    
  405. }
  406.  
  407.  
  408.  
  409. // Render the list of attractions
  410. renderPostData("#attractions-list", "鳥羽水環境保全中心, 宇治平等院, 中村藤吉本店 宇治本店, 大阪松竹座, 黑門市場, 春日大社, 日本橋電電城, 大阪環球影城, 礪波鬱金香公園, 高山老街, 飛驒古川站, 氣多若宮神社, 飛驒山王日枝神社, 曼陀羅寺公園, 長島Outlet")
  411.  
  412. // Render the list of activities
  413. renderPostData("#activities-list", "美食, 主題樂園, 購物")
  414.  
  415. // Render the list of locations
  416. renderPostData("#locations-list", "日本, 大阪, 京都, 名古屋, 立山, 梅田")
  417.  
  418.  
  419.  
  420.  
  421.  
  422. </script></div><div class="embed-js-tracking w-embed w-script"><script>
  423.  
  424. // Function to get a cookie
  425. function getCookie(name) {
  426.  var nameEQ = name + "=";
  427.  var ca = document.cookie.split(';');
  428.  for(var i=0;i < ca.length;i++) {
  429.      var c = ca[i];
  430.      while (c.charAt(0)==' ') c = c.substring(1,c.length);
  431.      if (c.indexOf(nameEQ) == 0) {
  432.          var cookieValue = c.substring(nameEQ.length, c.length);
  433.          return decodeURIComponent(cookieValue);
  434.      }
  435.  }
  436.  return null;
  437. }
  438.  
  439. // Function to get aduid
  440. function extractAdTrackingInfo(field) {
  441.  var urlParams = new URLSearchParams(window.location.search);
  442.  var fieldValue = urlParams.get(field);
  443.  
  444.  if (fieldValue) {
  445.      return fieldValue;
  446.  } else {
  447.      var adTrackingCookie = getCookie('adTracking');
  448.      if (adTrackingCookie) {
  449.          var adTrackingObj = JSON.parse(adTrackingCookie);
  450.          return adTrackingObj[field] || "(no tracking)";
  451.      } else {
  452.          return "(no tracking)";
  453.      }
  454.  }
  455. }
  456.  
  457. // Function to extract hotel link tracking data
  458. function extractPostTrackingData() {
  459.  var result = {};
  460.  
  461.  // adUID Tracking
  462.  // Ad tracking fields
  463.  var adTrackingFields = ['adUID', 'campaignid', 'adgroupid', 'device', 'creative', 'keyword', 'timestamp'];
  464.  
  465.  // Extract each ad tracking field value using the extractAdTrackingInfo function
  466.  adTrackingFields.forEach(function(field) {
  467.      result[field] = extractAdTrackingInfo(field);
  468.  });
  469.  
  470.  // Hotel Link Tracking
  471.  result.page_path = window.location.pathname;
  472.  result.page_url = window.location.href;
  473.  result.postPageSlug = window.location.pathname.split("/").filter(Boolean).pop(); // Get the URL slug
  474.  result.traffic_type = (window.location.href.indexOf('webflow.io') > -1 ? 'staging' : 'standard')
  475.  
  476.  return result;
  477. }
  478.  
  479. // Function to add Facebook Pixel trackng to hotel link buttons
  480. function addPostTracking() {
  481.  const postLinks = document.querySelectorAll(".btn-post");
  482.  
  483.  postLinks.forEach(link => {
  484.      link.addEventListener("click", event => {
  485.          const trackingData = extractPostTrackingData()
  486.          let eventName
  487.  
  488.          if (link.classList.contains("btn-post-product")) {
  489.            eventName = "Post-Click-Product Page"
  490.          } else {
  491.            eventName = "Post-Click-Whatsapp-Enquiry"
  492.          }
  493.  
  494.          fbq('trackCustom', eventName, trackingData)
  495.      });
  496.  });
  497. }
  498.  
  499. // Call the function to add tracking
  500. addPostTracking()
  501.  
  502. </script></div><script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=64d1f8d7c8eb554aa7393f33" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script><script src="https://cdn.prod.website-files.com/64d1f8d7c8eb554aa7393f33/js/webflow.af3e27223.js" type="text/javascript"></script><!-- Google Tag Manager (noscript) -->
  503. <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WKGC5B3"
  504. height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  505. <!-- End Google Tag Manager (noscript) -->
  506.  
  507.  
  508.  
  509. <script>
  510.  
  511. $(document).ready(function() {
  512.    $('.language-switch-chi').click(function(e){
  513.        relativePath = location.href.replace(location.origin,'');
  514.  
  515.        if(relativePath == "/en/home") {
  516.            window.location.href = "/";
  517.        } else if (!relativePath.includes("/en/")){
  518.            return
  519.        } else {
  520.            window.location.href = relativePath.replace("/en/", "/");
  521.        }
  522.  
  523.    })
  524.  
  525.    $('.language-switch-eng').click(function(e){
  526.        relativePath = location.href.replace(location.origin,'');
  527.  
  528.        if(relativePath == "/") {
  529.            window.location.href = "/en/home";
  530.        } else if (relativePath.includes("/en/")){
  531.            return
  532.        } else {
  533.            window.location.href = relativePath.replace("/", "/en/");
  534.        }
  535.    });
  536.  
  537.  
  538. });
  539.  
  540.  
  541. </script>
  542.  
  543.  
  544.  
  545. <!-- Render Nav Menu Dropdown -->
  546. <script>
  547. // Select all list items in the nav-menu-collection-list
  548. const listItems = document.querySelectorAll('.nav-menu-collection-list .nav-menu-collection-item');
  549.  
  550. // Loop through each list item
  551. listItems.forEach(item => {
  552.    // Find the nav-menu-link and nav-menu-hidden-link elements within the current list item
  553.    const navLink = item.querySelector('.nav-menu-link');
  554.    const footerLink = item.querySelector('.footer-link')
  555.    const hiddenLink = item.querySelector('.nav-menu-hidden-link');
  556.  
  557.  
  558.    if (hiddenLink) {
  559.        if (navLink) {
  560.            // Set the href attribute of nav-menu-link to the text content of nav-menu-hidden-link
  561.            navLink.setAttribute('href', hiddenLink.textContent.trim());
  562.        } else if (footerLink) {
  563.            // Set the href attribute of footer-link to the text content of nav-menu-hidden-link
  564.            footerLink.setAttribute('href', hiddenLink.textContent.trim());
  565.        }
  566.  
  567.        // Remove the nav-menu-hidden-link element from the DOM
  568.        hiddenLink.remove();
  569.    }
  570.  
  571. });
  572. </script>
  573. <!-- End Render Nav Menu Dropdown -->
  574.  
  575. <script>
  576. // Hide theme page menu for english
  577.  
  578. const websiteLanguage = window.location.pathname.includes("/en/") || window.location.pathname === "/en" ? "en" : "zh-Hant-HK"
  579. const footerItemThemePage = document.querySelector("#footer-item-themePage")
  580. if (websiteLanguage == "en") {
  581.  if (footerItemThemePage) {
  582.    footerItemThemePage.style.display = "none"
  583.  }
  584. }
  585.  
  586.  
  587.  
  588.  
  589. async function checkAndFetchHashID() {
  590.  // Function to create custom fbc cookie if it does not exists
  591.  const setCustomFbcCookie = () => {
  592.    if (
  593.      !getCookie("_fbc") &&
  594.      adTracking.fbclid &&
  595.      adTracking.fbclid != "(no value)"
  596.    ) {
  597.      let timestamp = new Date(adTracking.timestamp).getTime() / 1000;
  598.      let customFbc = `fb.1.${timestamp}.${adTracking.fbclid}`;
  599.      setCookie("_fbc", customFbc, 90);
  600.    }
  601.  };
  602.  
  603.  // Function to populate the cookie into hash object if the cookie exists
  604.  const populateCookieToHashObject = (cookieName, hashKey) => {
  605.    let cookieValue = getCookie(cookieName);
  606.    if (cookieValue) hashObject[hashKey] = cookieValue;
  607.  };
  608.  
  609.  // Function to populate fbc & fbp into the forms
  610.  const populateFormFields = (formPrefix) => {
  611.    document.getElementById(`${formPrefix}-hash_id`).value =getCookie("caribou_hashID");
  612.    if (getCookie("_fbc"))
  613.      document.getElementById(`${formPrefix}-fbc`).value = getCookie("_fbc");
  614.    if (getCookie("_fbp"))
  615.      document.getElementById(`${formPrefix}-fbp`).value = getCookie("_fbp");
  616.  };
  617.  
  618.  // Function to get theme page id
  619.  const getThemePageTrackingId = () => {
  620.    const firstHotelLink = document.querySelector(".hotel-link");
  621.    if (firstHotelLink) {
  622.      const regex = /caribou-theme-\d+/;
  623.      const match = firstHotelLink.href.match(regex);
  624.      if (match) {
  625.        return match[0];
  626.      }
  627.    }
  628.    return null;
  629.  };
  630.  
  631.  // Function to replace theme page id tracking with hash id
  632.  const updateHotelLinksWithHashId = () => {
  633.    const hashId = getCookie("caribou_hashID");
  634.    if (!hashId || hashId == "(no_hashID)") {
  635.      console.error("Hash ID not found in cookies");
  636.      return;
  637.    }
  638.  
  639.    const regex = /caribou-theme-\d+/;
  640.    const hotelLinks = document.querySelectorAll(".hotel-link");
  641.    hotelLinks.forEach((link) => {
  642.      link.href = link.href.replace(regex, `${hashId}`);
  643.    });
  644.  };
  645.  
  646.  // Check if the 'caribou_hashID' cookie exists. if not, fetch it
  647.  if (adTracking && Object.keys(adTracking).length > 0) {
  648.    // Proceed with hash request only if adTracking has data
  649.    if (
  650.      !getCookie("caribou_hashID") ||
  651.      getCookie("caribou_hashID") == "(no_hashID)"
  652.    ) {
  653.      // Init hashObject
  654.      var hashObject = {};
  655.  
  656.      // Add client_id into hash object
  657.      if (getClientId() != "") {
  658.        hashObject.client_id = getClientId();
  659.      }
  660.  
  661.      // Add session_id into hash object
  662.      if (getSessionId() != "") {
  663.        hashObject.session_id = getSessionId();
  664.      }
  665.  
  666.      // Add adTracking into the hash object
  667.      for (let key in adTracking) {
  668.        if (adTracking[key] && adTracking[key] != "(no value)") {
  669.          hashObject[key] = adTracking[key];
  670.        }
  671.      }
  672.  
  673.      setCustomFbcCookie();
  674.  
  675.      populateCookieToHashObject("_fbc", "fbc");
  676.      populateCookieToHashObject("_fbp", "fbp");
  677.  
  678.  
  679.      // Retrieve theme page id for hotel links tracking
  680.      if (window.location.href.includes("/product-theme/")) {
  681.        const themePageTrackingId = getThemePageTrackingId();
  682.        if (themePageTrackingId) {
  683.          hashObject.themePage_TrackingId = themePageTrackingId;
  684.        }
  685.      }
  686.  
  687.      // Only fetch hash if adTracking has relevant data
  688.      if (Object.keys(hashObject).length > 0) {
  689.        await fetchHashId(hashObject);
  690.      }
  691.    }
  692.  }
  693.  
  694.  if (getCookie("caribou_hashID") != "(no_hashID)") {
  695.    // Populate the hash id, fbc & fbp into sales funnel tracking form
  696.    if (window.location.href.includes("/tour-products/")) {
  697.      populateFormFields("funnel-form");
  698.    }
  699.  
  700.    // Populate the hash id, fbc and fbp into product search form
  701.    if (
  702.      window.location.href.includes("/tour-products") &&
  703.      !window.location.href.includes("/tour-products/")
  704.    ) {
  705.      populateFormFields("product-search");
  706.    }
  707.  
  708.    // Replace hotels link with hash id for theme page
  709.    if (window.location.href.includes('/product-theme/')){
  710.      const themePageTrackingId = getThemePageTrackingId()
  711.      if (themePageTrackingId) {
  712.        updateHotelLinksWithHashId(themePageTrackingId)
  713.      }
  714.    }
  715.  }
  716. }
  717.  
  718.  
  719.  
  720.  
  721.  
  722. $(document).ready(async function () {
  723.  
  724.  if (!window.location.href.includes("/product-theme/") && !window.location.href.includes("/tour-products/")) {
  725.    await checkAndFetchHashID();
  726.  }
  727.  
  728.  if (
  729.    !window.location.href.includes("/tour-products") &&
  730.    !window.location.href.includes("/product-theme/")
  731.  ) {
  732.    triggerCustomDataReady();
  733.  }
  734. });
  735.  
  736.  
  737.  
  738.  
  739.  
  740.  
  741. </script>
  742.  
  743. <script type="text/javascript" src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>
  744. <script>
  745. $(".post-media-list").slick({
  746. dots: true,
  747.  loop: true,
  748. prevArrow: $(".slick-prev"),
  749. nextArrow: $(".slick-next")
  750. })
  751.  
  752. </script>
  753.  
  754. </body></html>
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda