移除 CK101 停滯廣告畫面的 GM Script

平時在瀏覽 CK101 時,通常會先把有興趣的內容一起開成數個 Tab 等載入完成後再一次閱讀,但時常會因為擺放過久,準備瀏覽時卻發現畫面中出現了一個廣告視窗,雖然只要點一下滑鼠或鍵盤就可以關閉,但還是有點麻煩,因此比照之前的經驗,寫了個 GreaseMonkey script 來幫忙做這件事。

過程

網站的設定是設一個 setTimeout(),只要超過 300 秒沒有動作,就把廣告視窗 show 出來,所以一開始的想法是:把 setTimeout reset 掉。這時有個 javascript 的函式可用:clearTimeout() 但前提是必須要知道之前設的 Timeout Reference ID,無奈這是個區域變數,沒辦法直接存取,這時只好一股腦的把所有的 Timeout 全部 clear 掉(因為這個 id 會是從 1 開始的整數),但這樣可能會影響到其他的功能,而且經過測試似乎沒辦法成功,只好另謀他法。

第二個想法是,網頁用 jQuery.show() 來顯示廣告頁面,之前在用 Bootstrap 的時候,在動作時似乎可以 trigger 某些特定 event,例如 popover() 會有 show.bs.popover 之類的,如果我去偵測這些 event,然後把它中斷掉就行了。不過 jQuery 並沒有在 show/hide 裡去實作這些 event,雖然可以用自己寫 jQuery plugin 的方式 (可參考 Zuul & Tres 的解法),也成功地找到 trigger point,但要怎麼 stop 之後的動作還是個問題。

就在我思考怎麼去 stop show() 的後續動作時,忽然想到,我把整個廣告畫面的物件全部刪掉,讓它想 show 都 show 不出來不就行了?於是整個程式碼只有短短幾行。XD

var $ = unsafeWindow.jQuery;

$( document ).ready(function() {
  $('.gamePop').remove();
  $('#popupGameAd').remove();
});

安裝

請至 userscripts.org: CK101 – Remove GamePop 點選 Install 安裝。

開發

在 Github 設有 tsaiid / gm-ck101-remove-gamepop 專案,歡迎 clone 或 pull request。