PIXNET Logo 登入
我的部落格 我的部落格後台 我的帳號
登出

teresac042a的部落格

跳到主文

歡迎光臨teresac042a在痞客邦的小天地

部落格全站分類: 不設分類

  • 相簿
  • 部落格
  • 留言
  • 名片
  • Aug 15 Sat 2020 15:39
  • 光明十八街Piccolo Angolo角落咖啡館幾份外送

  • 立刻購買快遞到府
  • iHerb 保健品
  • 刷卡拿100元
  • 除臭襪
  • 女內褲
  • 無痕褲
  • 發燒衣
  • 床的世界
【周全特價中】 商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖留存方法一般常溫/請置於陰涼處常溫保留內容物成份玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改良劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成份本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食品添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保存期限365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭露事項本產品含有牛奶製品,不合適其過敏體質者食用。<p> 商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖保存方式一般常溫/請置於陰涼處常溫保留內容物成分玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥蛋白.乳清鈣.品質改良劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成份本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓留存刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭穿事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處理雞蛋及花生製品 </p> <p></p><p> <table width="100%"> <tr><td><p style="color:#0000cc;font-size:18pt;text-align:center;font-weight:bold"> 【日邦】咖啡牛奶糖(70g) </p> 本產品生產製程廠房,其裝備或生產管線有處置雞蛋及花生製品  日邦 咖啡牛奶糖(70g)新竹巨城,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖留存方式一般常溫/請置於陰涼處常溫留存內容物成份玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥蛋白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保存刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭穿事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處理雞蛋及花生製品  日邦 咖啡牛奶糖(70g)台茂,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖保存方式一般常溫/請置於陰涼處常溫保存內容物成分玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改良劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 蛋白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食品添加物名稱無產地日本國愛知縣廠商名稱邦盟國際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保留刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭穿事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處置雞蛋及花生製品  日邦 咖啡牛奶糖(70g)宜蘭,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖保留方式一般常溫/請置於陰涼處常溫保存內容物成份玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥蛋白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食品添加物名稱無產地日本國愛知縣廠商名稱邦盟國際有限公司廠商電話號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保存期限365天製造日期/有效日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭穿事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處置懲罰雞蛋及花生製品  日邦 咖啡牛奶糖(70g)家樂福,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖留存方式一般常溫/請置於陰涼處常溫留存內容物成分玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥蛋白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保留刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭露事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處理雞蛋及花生製品  日邦 咖啡牛奶糖(70g)麗寶百貨,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖留存方式一般常溫/請置於陰涼處常溫保存內容物成份玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓留存刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭露事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處置懲罰雞蛋及花生製品  日邦 咖啡牛奶糖(70g)板橋遠百,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖保留方法一般常溫/請置於陰涼處常溫保留內容物成分玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改良劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 蛋白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保存刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭露事項本產品含有牛奶製品,不適合其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處理雞蛋及花生製品  日邦 咖啡牛奶糖(70g)大遠百,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖保留方式一般常溫/請置於陰涼處常溫留存內容物成分玉米糖漿.加糖煉乳.砂糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商電話號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保留刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭露事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處理雞蛋及花生製品  日邦 咖啡牛奶糖(70g)新光三越,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖保留方式一般常溫/請置於陰涼處常溫保存內容物成分玉米糖漿.加糖煉乳.砂糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改良劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成份本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食品添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保存期限365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭露事項本產品含有牛奶製品,不合適其過敏體質者食用。 </div> <div class="col-md-12"> <figure><img src="https://s.yimg.com/wb/images/990886B34175C7FF7B1618C96E89AA4493C2EF7B" alt=" 商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖保留方式一般常溫/請置於陰涼處常溫保留內容物成分玉米糖漿.加糖煉乳.砂糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改良劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保存刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭露事項本產品含有牛奶製品,不適合其過敏體質者食用。 本產品生產製程廠房,其設備或生產管線有處置雞蛋及花生製品 : 日邦 咖啡牛奶糖(70g)" class="img-responsive"> <figcaption>  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖留存方法一般常溫/請置於陰涼處常溫保留內容物成分玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥蛋白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食品添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保存刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭穿事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處理雞蛋及花生製品  日邦 咖啡牛奶糖(70g)折價券,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖留存方式一般常溫/請置於陰涼處常溫保留內容物成分玉米糖漿.加糖煉乳.砂糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成份本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保留刻日365天製造日期/有效日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭露事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處理雞蛋及花生製品  日邦 咖啡牛奶糖(70g)哪裡買,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖留存方式一般常溫/請置於陰涼處常溫保存內容物成分玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食品添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商電話號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保留期限365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭穿事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處置懲罰雞蛋及花生製品  日邦 咖啡牛奶糖(70g)大潤發,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖保留方法一般常溫/請置於陰涼處常溫留存內容物成分玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商電話號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓留存刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭穿事項本產品含有牛奶製品,不適合其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處置懲罰雞蛋及花生製品  日邦 咖啡牛奶糖(70g)全聯,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖保留方式一般常溫/請置於陰涼處常溫保留內容物成份玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改良劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保存刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭穿事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處置懲罰雞蛋及花生製品  日邦 咖啡牛奶糖(70g)宅配,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖留存方式一般常溫/請置於陰涼處常溫保存內容物成分玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓保存刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭穿事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處理雞蛋及花生製品  日邦 咖啡牛奶糖(70g)哪裡有,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖保留方式一般常溫/請置於陰涼處常溫留存內容物成分玉米糖漿.加糖煉乳.砂糖.植物油(棕櫚油).咖啡粉.小麥卵白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 卵白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食品添加物名稱無產地日本國愛知縣廠商名稱邦友邦際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓留存期限365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭穿事項本產品含有牛奶製品,不合適其過敏體質者食用。 本產品生產製程廠房,其設備或生產管線有處置懲罰雞蛋及花生製品  日邦 咖啡牛奶糖(70g)台中大遠百,  商品名稱【日邦】咖啡牛奶糖(70g)品牌其他品牌種類軟糖留存方法一般常溫/請置於陰涼處常溫保留內容物成份玉米糖漿.加糖煉乳.沙糖.植物油(棕櫚油).咖啡粉.小麥蛋白.乳清鈣.品質改進劑(D-山梨醇).大豆卵磷脂.香料.熱量296大卡每份營養成分本包裝含1份 每份 熱量 296大卡 蛋白質 2.8公克 脂肪 7.8公克  飽和脂肪   25.2公克  反式脂肪    0公克 碳水化合物 53.7公克 糖 31.1公克 鈉 83毫克內容量70g食物添加物名稱無產地日本國愛知縣廠商名稱邦盟國際有限公司廠商德律風號碼0800-000369廠商地址台北市忠孝東路三段227-3號2樓留存刻日365天製造日期/有用日期依商品包裝顯示投保產品責任險字號0522字第03ML001731號其他揭穿事項本產品含有牛奶製品,不適合其過敏體質者食用。 本產品生產製程廠房,其裝備或生產管線有處置懲罰雞蛋及花生製品  日邦 咖啡牛奶糖(70g)忠孝東路 </figcaption> </figure> </div> <div class="col-md-12"> <p class="text-center">馬上購買 宅配到府</p> <p></p><p class="text-center">馬上采辦 宅配到府</p> </div> </div><ul><li><a href="https://www.sipa.gov.tw/content/file/Longtan_1_10403.pdf">丁立文醫師</a></li><li><a href="https://market.ltn.com.tw/article/6121">丁斌煌醫師:「曲線雕塑」解決深層脂肪 今年最夯!</a></li><li><a href="https://market.ltn.com.tw/article/6086">丁立文醫師:杜絕外遇 緊抓住男人的心</a></li><li><a href="http://www.taiwanhot.net/?p=730257">邱浚彥</a></li></ul><a target='_blank' href='https://fupvvux9j5.pixnet.net/blog/post/324912627'>生醫二路杯執飲料&福刈包幾份外送</a><br><a target='_blank' href='https://xxtsfil0t1.pixnet.net/blog/post/324919077'>敦和南路Miss Energy低GI廚房 台北重慶南店飲料外送外送</a><br><a target='_blank' href='https://uhcis3gfh5.pixnet.net/blog/post/324919491'>大埔六路吉甜不辣 誠品南西店中式料理外送</a><br><a target='_blank' href='https://ninab7ve4i2.pixnet.net/blog/post/218724837'>長壽街Drink Store水雲堂 八德店外送費</a><br><a target='_blank' href='https://mf68wseiw7gcjl.wordpress.com/2020/05/29/水江路清心福全-松山八德店壽司外送外送/'>水江路清心福全 松山八德店壽司外送外送</a><br> </div> </div> </div> <!-- jQuery --> <script src="js/jquery.min.js"></script> <!-- jQuery Easing --> <script src="js/jquery.easing.1.3.js"></script> <!-- Bootstrap --> <script src="js/bootstrap.min.js"></script> <!-- Carousel --> <script src="js/owl.carousel.min.js"></script> <!-- Stellar --> <script src="js/jquery.stellar.min.js"></script> <!-- Waypoints --> <script src="js/jquery.waypoints.min.js"></script> <!-- Counters --> <script src="js/jquery.countTo.js"></script> <!-- MAIN JS --> <script src="js/main.js"></script> </div> <!-- /.article-content-inner --> <div class="tag-container-parent"> <div class="tag-container article-keyword" data-version="a"> </div> </div> <!-- /.tag-container-parent --> <div class="author-profile"> <div class="author-profile__header">創作者介紹</div> <div class="author-profile__main" id="mixpanel-author-box"> <a> <img class="author-profile__avatar" src="https://s3.1px.tw/blog/common/avatar/blog_cover_dark.jpg" alt="創作者 teresac042a的部落格 的頭像" loading="lazy" /> </a> <div class="author-profile__content"> <a href="https://www.pixnet.net/pcard/teresac042a" class="author-profile__name">teresac042a</a> <p class="author-profile__info">teresac042a的部落格</p> </div> <div class="author-profile__subscribe hoverable"> <button data-follow-state="關注" class="subscribe-btn member"></button> </div> </div> </div> <!-- /.author-profile --> </div> <!-- /.article-content --> <p class="author"> teresac042a 發表在 <a href="https://www.pixnet.net">痞客邦</a> <a href="#comments">留言</a>(0) <span class="author-views">人氣( <span id="BlogArticleCount" data-stats="single" data-post-id="16018057790"> 0 </span> ) </span> </p> <!-- /.author --> <div id="pixnet-ad-content-left-right-wrapper"> <div class="left"></div> <div class="right"></div> </div> <!-- /#pixnet-ad-content-left-right-wrapper --> <div class="article-footer"> <ul class="refer"> <li> 全站分類: <a href="https://www.pixnet.net/channel/gaming">電玩動漫</a> </li> </ul> <div class="back-to-top"> <a href="#top" title="back to the top of the page">▲top</a> </div> <div id="post-comment" class="comment-container" x-data="commentComponent({postId: '16018057790', blog_id: '7814159', allowComment: true})" x-init="init()"> <div class="post-comment__header"> <span x-text="meta.totalCount + ' 則留言'"></span> </div> <div class="post-comment__body"> <ol class="post-comment__list"> <template x-for="comment in comments" :key="comment.id"> <li class="post-comment__item"> <div class="comment-card"> <a href="#" class="comment-card__avatar-link" :aria-label="'查看 ' + comment.commenter.display_name + ' 的個人頁'"> <img class="comment-card__avatar" :src="comment.commenter.avatar" :alt="comment.commenter.display_name" loading="lazy" /> </a> <div class="comment-card__main"> <div class="comment-card__bubble"> <div class="comment-card__author-row"> <a href="#" class="comment-card__author" x-text="comment.commenter.display_name"></a> <span class="comment-card__badge comment-card__badge--author" x-show="comment.commenter.is_author">作者</span> </div> <div class="comment-card__content" x-html="comment.content"></div> </div> <!-- /.comment-card__bubble --> <div class="comment-card__meta"> <time class="comment-card__time" :datetime="comment.datetime" x-text="comment.human_time"></time> <a href="#" class="comment-card__action" x-show="isOwner()" @click.prevent="toggleReply(comment.id)">回覆</a> <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': comment.visibility == 1 }" @click.prevent="changeCommentVisibility(comment.id, 'show')">顯示</a> <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': comment.visibility == 2 }" @click.prevent="changeCommentVisibility(comment.id, 'hide')">隱藏</a> <a href="#" class="comment-card__action" x-show="isOwner()" @click.prevent="deleteComment(comment.id)">刪除</a> </div> <!-- /.comment-card__meta --> <div class="comment-card__replies"> <ol class="reply-list"> <template x-for="reply in comment.replies"> <li class="reply-list__item"> <div class="comment-card comment-card--reply" :class="{'comment-card--hidden': reply.visibility == 2 && isOwner()}"> <a href="#" class="comment-card__avatar-link" aria-label="查看 Eric 的個人頁"> <img class="comment-card__avatar" :src="reply.replyer.avatar" :alt="reply.replyer.display_name" loading="lazy" /> </a> <div class="comment-card__main"> <div class="comment-card__bubble"> <div class="comment-card__author-row"> <a :href="reply.replyer.card_url" class="comment-card__author" x-text="reply.replyer.display_name"></a> <span class="comment-card__badge comment-card__badge--author" x-show="reply.replyer.is_author">作者</span> </div> <div class="comment-card__content" x-html="reply.content"></div> </div> <div class="comment-card__meta"> <time class="comment-card__time" :datetime="reply.datetime" x-text="reply.human_time"></time> <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': reply.visibility == 1 }" @click.prevent="changeReplyVisibility(comment.id, reply.id, 'show')">顯示</a> <a href="#" class="comment-card__action" x-show="isOwner()" :class="{ 'comment-card__action--active': reply.visibility == 2 }" @click.prevent="changeReplyVisibility(comment.id, reply.id, 'hide')">隱藏</a> <a href="#" class="comment-card__action" x-show="isOwner()" @click.prevent="deleteReply(comment.id, reply.id)">刪除</a> </div> <!-- /.comment-card__meta --> </div> </div> </li> </template> </ol> </div> <!-- /.comment-card__replies --> <div class="comment-card__reply-editor" x-show="replyingTo === comment.id && isOwner()"> <div class="reply-editor"> <div class="reply-editor__avatar"> <img src="https://i.pravatar.cc/48?img=5"> </div> <form class="reply-editor__form"> <div class="reply-editor__input-wrap"> <textarea class="reply-editor__textarea" placeholder="寫下你的回覆..." x-model="replyDraft[comment.id].content"></textarea> </div> <div class="reply-editor__footer"> <div class="reply-editor__visibility"> <label> <input type="radio" name="reply_visibility" value="1" x-model="replyDraft[comment.id].visibility" checked> 公開回覆 </label> <label> <input type="radio" name="reply_visibility" value="2" x-model="replyDraft[comment.id].visibility"> 私密回覆 </label> </div> <div class="reply-editor__actions"> <button type="button" class="reply-editor__cancel" @click="replyingTo = null">取消</button> <button type="submit" class="reply-editor__submit" @click.prevent="submitReply(comment.id)">回覆</button> </div> </div> </form> </div> </div> <!-- /.comment-card__reply-editor --> </div> <!-- /.comment-card__main --> </div> </li> </template> <template x-if="comments.length === 0"> <li class="post-comment__item" style="text-align: center; color: #888; padding: 2rem 0;"> 沒有留言,快來搶沙發吧! </li> </template> </ol> <button class="btn-more" x-show="meta.page < meta.pageCount" @click="loadMore">載入更多</button> </div> <!-- /.post-comment__body --> <div class="post-comment__footer" x-show="allowComment"> <div class="comment-editor" x-show="isLoggedIn"> <a href="#" class="comment-editor__avatar-link" aria-label="我的個人頁"> <img class="comment-editor__avatar" :src="user?.avatar" :alt="user?.display_name" loading="lazy" /> </a> <form class="comment-editor__form" action="" method="post"> <label for="comment-message" class="comment-editor__label" x-text="'以 ' + user?.display_name + ' 身份發表留言'"></label> <div class="comment-editor__input-wrap"> <textarea id="comment-message" name="comment" class="comment-editor__textarea" rows="3" placeholder="寫下你的留言..." x-model="newComment.content"></textarea> </div> <div class="comment-editor__footer"> <div class="comment-editor__visibility"> <label class="comment-editor__visibility-option"> <input type="radio" name="visibility" value="1" x-model="newComment.visibility" checked> <span>公開留言</span> </label> <label class="comment-editor__visibility-option"> <input type="radio" name="visibility" value="2" x-model="newComment.visibility"> <span>私密留言</span> </label> </div> <div class="comment-editor__actions"> <button type="submit" class="comment-editor__button comment-editor__button--primary" @click.prevent="submitComment()"> 發佈留言 </button> </div> </div> </form> </div> <div x-show="!isLoggedIn" style="text-align: center; padding: 2rem 0;"> <p style="color: #555;">請先 <a :href="loginUrl" style="color: #007bff; text-decoration: underline;">登入</a> 以發表留言。</p> </div> </div> <!-- /.post-comment__footer --> </div> <script type="text/javascript"> function commentComponent({ postId, blog_id, allowComment }) { return { postId, blog_id, allowComment, /* ------------------------- state -------------------------- */ user: null, isLoggedIn: false, isOwner() { return this.isLoggedIn && this.user.is_blogger && this.user.blog.id === this.blog_id }, comments: [], meta: { page: 1, pageSize: 10, pageCount: 1, totalCount: 0 }, loading: false, replyingTo: null, newComment: { content: "", visibility: 1 }, replyDraft: {}, guest: { name: "", contact: "" }, get loginUrl() { return '/auth/authorize?redirect_uri=' + encodeURIComponent(location.href) }, /* ------------------------- init -------------------------- */ async init() { await this.fetchUser() await this.fetchComments() }, /* ------------------------- user -------------------------- */ async fetchUser() { try { const res = await fetch("/auth/me") if (res.status === 401) { this.isLoggedIn = false return } const user = await res.json() this.user = user this.isLoggedIn = true } catch (e) { console.error("auth error", e) } }, /* ------------------------- comments -------------------------- */ async fetchComments(page = 1) { this.loading = true const res = await fetch( `/blog/get-comments?postId=${this.postId}&page=${page}` ) const json = await res.json() this.comments = json.data this.meta = json.meta this.comments.forEach(comment => { if (!this.replyDraft[comment.id]) { this.replyDraft[comment.id] = { content: "", visibility: "1" } } }) this.loading = false }, async loadMore() { if (this.meta.page >= this.meta.pageCount) return const nextPage = this.meta.page + 1 const res = await fetch( `/blog/get-comments?postId=${this.postId}&page=${nextPage}` ) const json = await res.json() this.comments = [...this.comments, ...json.data] this.meta = json.meta }, /* ------------------------- reply editor -------------------------- */ toggleReply(commentId) { if (this.replyingTo === commentId) { this.replyingTo = null } else { this.replyingTo = commentId if (!this.replyDraft[commentId]) { this.replyDraft[commentId] = { content: "", visibility: "public" } } } }, /* ------------------------- submit comment -------------------------- */ async submitComment() { if (!this.newComment.content.trim()) return const payload = { postId: this.postId, content: this.newComment.content, visibility: this.newComment.visibility, commenter: this.isLoggedIn ? this.user.display_name : this.guest.name, contact: this.isLoggedIn ? null : this.guest.contact } const res = await fetch("/blog/post-comment", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }) if (!res.ok) { const errorData = await res.json() alert(errorData.message || "留言失敗,請稍後再試") return } const comment = await res.json() this.comments.push(comment) this.newComment.content = "" }, /* ------------------------- submit reply -------------------------- */ async submitReply(commentId) { if (!this.isOwner()) return const draft = this.replyDraft[commentId] if (!draft || !draft.content.trim()) return const payload = { commentId: commentId, content: draft.content, visibility: draft.visibility } try { const res = await fetch("/blog/post-reply", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }) if (!res.ok) { const errorData = await res.json() alert(errorData.message || "回覆失敗,請稍後再試") return } const reply = await res.json(); const comment = this.comments.find(c => c.id === commentId) if (!comment.replies) { comment.replies = [] } comment.replies.push(reply) draft.content = "" this.replyingTo = null } catch (e) { console.error("reply error", e) } }, async changeCommentVisibility(commentId, visibility) { try { const res = await fetch("/blog/comments/visibility", { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ commentId, visibility: visibility == 'show' ? 1 : 2}) }) const data = await res.json() if (!res.ok) { alert(data.message || "操作失敗") return } const comment = this.comments.find(c => c.id === commentId) if (comment) { comment.visibility = visibility == 'show' ? 1 : 2; } } catch (e) { alert("系統錯誤,請稍後再試") console.error("show comment error", e) } }, async deleteComment(commentId) { if (!confirm("確定要刪除此留言嗎?")) return try { const res = await fetch(`/blog/comments/${commentId}`, { method: "DELETE" }) const data = await res.json() if (!res.ok) { alert(data.message || "操作失敗") return } this.comments = this.comments.filter(c => c.id !== commentId) } catch (e) { console.error("delete comment error", e) } }, async changeReplyVisibility(commentId, replyId, visibility) { try { const res = await fetch("/blog/replies/visibility", { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ commentId, replyId, visibility: visibility == 'show' ? 1 : 2 }) }) const data = await res.json() if (!res.ok) { alert(data.message || "操作失敗") return } const comment = this.comments.find(c => c.id === commentId) const reply = comment.replies.find(r => r.id === replyId) if (reply) { reply.visibility = visibility == 'show' ? 1 : 2; } } catch (e) { console.error("change reply visibility error", e) } }, async deleteReply(commentId, replyId) { if (!confirm("確定要刪除此回覆嗎?")) return try { const res = await fetch(`/blog/comments/${commentId}/replies/${replyId}`, { method: "DELETE" }) const data = await res.json() if (!res.ok) { alert(data.message || "操作失敗") return } const comment = this.comments.find(c => c.id === commentId) comment.replies = comment.replies.filter(r => r.id !== replyId) } catch (e) { console.error("delete reply error", e) } }, /* ------------------------- guest avatar -------------------------- */ guestAvatar() { const name = this.guest.name || "Guest" return `https://ui-avatars.com/api/?name=${encodeURIComponent(name)}` } } } </script> <section class="rcmd-related-posts" x-data="pixPostRecommendWidget({ postId: '16018057790', limit: 3, })" > <div class="rcmd-related-posts__inner"> <div class="rcmd-related-posts__header"> <div class="rcmd-related-posts__title-wrap"> <span class="rcmd-related-posts__eyebrow">Recommended</span> <h2 class="rcmd-related-posts__title">你可能也喜歡</h2> <p class="rcmd-related-posts__desc">為你精選 3 篇值得延伸閱讀的內容</p> </div> </div> <!-- loading --> <div class="rcmd-related-posts__state" x-show="loading" x-cloak> <div class="rcmd-related-posts__loading">載入推薦文章中...</div> </div> <!-- error --> <div class="rcmd-related-posts__state" x-show="!loading && error" x-cloak> <div class="rcmd-related-posts__error" x-text="error"></div> </div> <!-- empty --> <div class="rcmd-related-posts__state" x-show="!loading && !error && posts.length === 0" x-cloak> <div class="rcmd-related-posts__empty">目前沒有推薦文章</div> </div> <!-- list --> <div class="rcmd-related-posts__grid" x-show="!loading && !error && posts.length > 0" x-cloak> <template x-for="post in posts" :key="post.id"> <article class="rcmd-post-card"> <a class="rcmd-post-card__link" :href="post.url"> <div class="rcmd-post-card__image-wrap"> <img class="rcmd-post-card__image" :src="getImage(post)" :alt="post.title" loading="lazy" > </div> <div class="rcmd-post-card__body"> <div class="rcmd-post-card__meta"> <time :datetime="post.date" x-text="formatDate(post)"></time> </div> <h3 class="rcmd-post-card__title" x-text="post.title"></h3> <p class="rcmd-post-card__summary" x-show="post.summary" x-text="post.summary" ></p> <div class="rcmd-post-card__footer"> <span class="rcmd-post-card__readmore">閱讀文章</span> </div> </div> </a> </article> </template> </div> </div> </section> <script> function pixPostRecommendWidget(config = {}) { return { postId: config.postId || '', limit: Number(config.limit || 6), endpoint: '/blog/get-widget-data?name=pixPostRecommend&postId=', loading: false, error: '', posts: [], fallbackImage: 'https://picsum.photos/seed/pixpostrecommend/800/500', async init() { if (!this.postId) { this.error = '缺少 postId'; return; } this.loading = true; this.error = ''; try { const response = await fetch(`${this.endpoint}${encodeURIComponent(this.postId)}`, { method: 'GET', headers: { 'Accept': 'application/json' } }); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } const result = await response.json(); if (!result || Number(result.code) !== 0 || !Array.isArray(result.data)) { throw new Error('API 回傳格式不正確'); } this.posts = result.data .slice(0, this.limit) .map(item => ({ id: item.id, title: item.title || '', url: item.url || '#', published_at: item.published_at || '', date: item.date || '', time: item.time || '', timestamp: item.timestamp || 0, views: item.views || '', feature_image: item.feature_image || null, summary: item.summary || '', })); } catch (err) { console.error('[pixPostRecommendWidget]', err); this.error = '推薦文章載入失敗'; } finally { this.loading = false; } }, getImage(post) { return post.feature_image || this.fallbackImage; }, formatDate(post) { if (post.date) { return post.date.replace(/-/g, '/'); } return post.published_at || ''; } }; } </script> <div id="pixnet-ad-after-footer"></div> </div> <!-- /.article-footer --> </div> </div> </div> </div> </div> <div id="links"> <div id="sidebar__inner"> <div id="links-row-1"> <div id="user-info" class="hslice box"> <h4 class="box-title entry-title"></h4> <div class="box-text entry-content"> <a class="user-img" href="#"> <img src="https://s3.1px.tw/blog/common/avatar/blog_cover_dark.jpg" alt="" loading="lazy" style="width: 90px; height: 90px;" /> </a> <div class="user-action hoverable"> <button data-follow-state="關注" class="subscribe-btn member" ></button> </div> <dl> <dt>暱稱:</dt> <dd>teresac042a</dd> <dt>分類:</dt> <dd> <a href="#">不設分類</a> </dd> <dt>好友:</dt> <dd> 累積中 <!-- 共75位{" "} <a href="#" id="user-info-open-friends-iframe"> (看全部) </a> --> </dd> <dt>地區:</dt> <dd> </dd> </dl> </div> </div> <div class="hslice box" data-identifier="pixHotArticle" id="hot-article"> <h4 class="box-title entry-title"></h4> <div class="box-text entry-content"> <ul id="hotArtUl"> </ul> </div> <script> (function () { async function loadHotArticle() { const box = document.querySelector('.box[data-identifier="pixHotArticle"]'); if (!box) return; const ul = box.querySelector("#hotArtUl"); if (!ul) return; if (ul.dataset.loaded) return; ul.dataset.loaded = "1"; try { const res = await fetch("/blog/get-widget-data?name=pixHotArticle", { method: "GET", headers: { "Accept": "application/json" } }); const json = await res.json(); if (json.code !== 0 || !Array.isArray(json.data)) return; const data = json.data; const fragment = document.createDocumentFragment(); data.forEach(item => { const li = document.createElement("li"); const a = document.createElement("a"); a.href = item.url; const span = document.createElement("span"); span.textContent = "(" + item.views + ") "; a.appendChild(span); a.appendChild(document.createTextNode(item.title)); li.appendChild(a); fragment.appendChild(li); }); ul.appendChild(fragment); } catch (err) { console.error("pixHotArticle load failed", err); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", loadHotArticle); } else { loadHotArticle(); } })(); </script> </div> <div class="hslice box" data-identifier="pixCategory" id="category"> <h4 class="box-title entry-title"> </h4> <div class="box-text entry-content"> <div class="box-more"></div> </div> <script type="text/javascript"> (function () { function formatNumber(num) { return new Intl.NumberFormat().format(num || 0); } function renderFolder(item) { const wrapper = document.createElement("div"); wrapper.className = "inner-box"; const h6 = document.createElement("h6"); h6.style.cursor = "pointer"; const img = document.createElement("img"); img.src = "//s.pixfs.net/blog/images/choc/plus.gif"; img.width = 11; img.height = 11; img.alt = "toggle"; const ul = document.createElement("ul"); ul.className = "category-" + item.id; ul.style.display = "none"; h6.appendChild(img); h6.appendChild(document.createTextNode(" " + item.name + " (" + (item.children?.length || 0) + ")")); h6.addEventListener("click", function () { const isHidden = ul.style.display === "none"; ul.style.display = isHidden ? "block" : "none"; img.src = isHidden ? "//s.pixfs.net/blog/images/choc/minus.gif" : "//s.pixfs.net/blog/images/choc/plus.gif"; }); (item.children || []).forEach(child => { const li = document.createElement("li"); const a = document.createElement("a"); a.href = child.url; a.textContent = child.name + " (" + formatNumber(child.post_count) + ")"; li.appendChild(a); ul.appendChild(li); }); wrapper.appendChild(h6); wrapper.appendChild(ul); return wrapper; } function renderCategoryList(data) { const ul = document.createElement("ul"); data .filter(item => item.type === "category") .forEach(item => { const li = document.createElement("li"); const a = document.createElement("a"); a.href = item.url; a.textContent = item.name + " (" + formatNumber(item.post_count) + ")"; li.appendChild(a); ul.appendChild(li); }); return ul; } async function loadPixCategory() { const box = document.querySelector('.box[data-identifier="pixCategory"]'); if (!box) return; const content = box.querySelector(".box-text.entry-content"); try { const res = await fetch("/blog/get-widget-data?name=pixCategory"); const json = await res.json(); if (json.code !== 0) return; const data = json.data; data.forEach(item => { if (item.type === "folder") { content.appendChild(renderFolder(item)); } }); const categoryList = renderCategoryList(data); content.appendChild(categoryList); } catch (err) { console.error("pixCategory load failed", err); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", loadPixCategory); } else { loadPixCategory(); } })(); </script> </div> <div class="hslice box" data-identifier="pixLatestArticle" id="latest-article"> <h4 class="box-title entry-title"> </h4> <div class="box-text entry-content"> <ul id="last-article-box"> </ul> </div> <script> (function () { async function loadLatestArticle() { const box = document.querySelector('.box[data-identifier="pixLatestArticle"]'); if (!box) return; const ul = box.querySelector("#last-article-box"); if (!ul) return; try { const res = await fetch("/blog/get-widget-data?name=pixLatestArticle", { method: "GET", headers: { "Accept": "application/json" } }); const json = await res.json(); if (json.code !== 0 || !Array.isArray(json.data)) return; const data = json.data; const fragment = document.createDocumentFragment(); data.forEach(item => { const li = document.createElement("li"); const a = document.createElement("a"); a.href = item.url; a.textContent = item.title; li.appendChild(a); fragment.appendChild(li); }); ul.appendChild(fragment); } catch (err) { console.error("pixLatestArticle load failed", err); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", loadLatestArticle); } else { loadLatestArticle(); } })(); </script> </div> <div class="hslice box" data-identifier="pixLatestComment" id="last-comment"> <h4 class="box-title entry-title"> </h4> <div class="box-text entry-content"> <div class="box-more"></div> <ul id="last-comment-box"> </ul> </div> <script> (function () { function truncate(str, len = 30) { if (!str) return ""; return str.length > len ? str.slice(0, len) + "..." : str; } async function loadLatestComment() { const box = document.querySelector('.box[data-identifier="pixLatestComment"]'); if (!box) return; const ul = box.querySelector("#last-comment-box"); if (!ul) return; if (ul.dataset.loaded) return; ul.dataset.loaded = "1"; try { const res = await fetch("/blog/get-widget-data?name=pixLatestComment"); const json = await res.json(); if (json.code !== 0 || !Array.isArray(json.data)) return; const fragment = document.createDocumentFragment(); json.data.forEach(item => { const li = document.createElement("li"); const a = document.createElement("a"); a.href = item.url; const title = truncate(item.post_title, 25); a.textContent = `[${item.time}] ${item.commenter} 於文章「${title}」`; li.appendChild(a); if (item.visibility === "public") { li.appendChild(document.createTextNode("留言:")); const br = document.createElement("br"); li.appendChild(br); li.appendChild(document.createTextNode(item.content)); } else { li.appendChild( document.createTextNode("發表了一則私密留言") ); } fragment.appendChild(li); }); ul.appendChild(fragment); } catch (err) { console.error("pixLatestComment load failed", err); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", loadLatestComment); } else { loadLatestComment(); } })(); </script> </div> <div class="hslice box" data-identifier="pixHits" id="counter"> <h4 class="box-title entry-title">參觀人氣</h4> <div class="box-text entry-content"> <ul> <li>本日人氣:<span id="blog_hit_daily"></span></li> <li>累積人氣:<span id="blog_hit_total"></span></li> </ul> </div> <script> (function () { async function loadPixHits() { const box = document.querySelector("#counter"); if (!box) return; const dailyEl = box.querySelector("#blog_hit_daily"); const totalEl = box.querySelector("#blog_hit_total"); if (!dailyEl || !totalEl) return; // 避免重複載入 if (box.dataset.loaded) return; box.dataset.loaded = "1"; try { const res = await fetch("/blog/get-widget-data?name=pixHits", { method: "GET", headers: { "Accept": "application/json" } }); const json = await res.json(); if (json.code !== 0 || !json.data) return; const data = json.data; dailyEl.textContent = data.views_today ?? "0"; totalEl.textContent = data.views_total ?? "0"; } catch (err) { console.error("pixHits load failed", err); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", loadPixHits); } else { loadPixHits(); } })(); </script> </div> </div> <div id="links-row-2"> <div id="sticky-sidebar-ad"></div> </div> </div> </div> </div> <div id="footer"> </div> <img src="/api/track/pv?postId=16018057790" alt="Blog Stats" width="1" height="1" style="display:none;" /> <script type="text/javascript" async src="https://static.1px.tw/blog/v1p2/js/stats.min.js?v=1777073750"></script> </div> <div id="extradiv11"></div> <div id="extradiv10"></div> <div id="extradiv9"></div> <div id="extradiv8"></div> </div> <div id="extradiv7"></div> <div id="extradiv6"></div> <div id="extradiv5"></div> <div id="extradiv4"></div> </div> <div id="extradiv3"></div> <div id="extradiv2"></div> <div id="extradiv1"></div> <div id="extradiv0"></div> </div> </div> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TRLQMPKX" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <!-- Pixnet SDK --> <script type="text/javascript"> document.addEventListener("DOMContentLoaded", function () { // datalayer push event window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'hydration_complete' }) }); </script> <!-- End Pixnet SDK --> <div x-data="adultWarning()" x-init="init()" x-show="visible" x-cloak class="aw-overlay" :class="{ 'mobile': isMobile }" > <div class="aw-modal"> <div class="aw-icon"> ⚠️ </div> <h2 class="aw-title">成人內容提醒</h2> <p class="aw-desc"> 本部落格內容僅限年滿十八歲者瀏覽。<br> 若您未滿十八歲,請立即離開。 </p> <p class="aw-sub"> 已滿十八歲者,亦請勿將內容提供給未成年人士。 </p> <div class="aw-actions"> <button class="aw-btn primary" @click="accept()">我已滿18歲</button> <button class="aw-btn secondary" @click="decline()">離開</button> </div> </div> </div> <script> document.addEventListener('alpine:init', () => { Alpine.data('adultWarning', () => ({ visible: false, isMobile: false, storageKey: 'adult_warning_accepted_at', init() { this.isMobile = window.innerWidth < 768; if (!window.PIXNET?.options?.AdultWarning) return; const ts = localStorage.getItem(this.storageKey); if (ts && Date.now() - parseInt(ts) < 4 * 60 * 60 * 1000) return; this.visible = true; // 🔒 防止背景滾動 document.body.classList.add('modal-open'); }, accept() { localStorage.setItem(this.storageKey, Date.now().toString()); this.close(); }, decline() { window.location.href = 'https://www.pixnet.net/'; // 或其他安全的網站 }, close() { this.visible = false; document.body.classList.remove('modal-open'); } })) }) </script> <!-- end of adult warning --> </body> </html>