下列廣告的容器代碼,會固定在內頁露出(檢視原始碼可見)
css設定.lightbox-auto-scale這層,clip: rect(0, 0, 0, 0); overflow: hidden,是為了隱藏容器。
這樣做的目的,是因為我們發現,多層廣告商素材iframe嵌套時,常常會有內層素材(廣告商2)沒顯示,但外層框架(廣告商1)不知情的狀況
此例中,iframe#vendor2的內容為空白,但沒有錯誤通知機制告訴iframe#vendor1,
導致廣告商1以為素材正確產出,故將大小資訊更新到
如:style="border: 0pt none; display: inline-block; width: 320px; height: 480px;"
這樣會在頁面產出一個寬320px,高480px的空白遮罩
使用者沒有方法關掉,因為我們的最外層框架沒有做關閉鈕,關閉鈕都是素材那個層級做的
遮罩也導致了下方內容無法點選互動
我們的解決方式是,容器框架預設隱藏,讓素材通知母頁顯示,素材端的處理方式大致有兩種:
- 靜態的蓋版素材,套用我們自己開發的gam框架
當廣告iframe內容載入後,會透過window.top.postMessage,回傳大小型態等相關資訊
讓母頁上的監控js,將.lightbox-auto-scale這層,加上一個show的class,讓其顯示
此時框架代碼異動如下:
而show這個class在css裡已有定義:
- 若合作廠商有自己的蓋版廣告機制,可以用下列方式在頁面上顯示
- 直接將廣告素材 inject 到 window top (a)
- 廣告素材置於原始容器內
=> 在.lightbox-auto-scale這層,加上 .show,或是
=> 將css注入到母頁,複寫clip設定
a.將廣告素材及css,js等,透過inject js的方式,注入到顯示廣告的母頁
b.若廣告素材維持放在現有的容器,可透過js將母頁上的.lightbox-auto-scale這層,加一個show的class
c.若廣告素材維持放在現有的容器,可透過js將css注入到母頁,複寫clip設定