相對於谷歌對廣告攔截的禁止,蘋果與之態度截然相反,繼mac版safari加入廣告攔截工具之後,即將到來的ios9對safari也引入了內容攔截外掛程式-content blocker,並且開發者可以使用最新的xcode7開發以及使用ios 9模擬器進行除錯,下面,筆者將用乙個簡單的例項進行講解如何開發content blocker。
在使用google搜尋時,排行靠前面的幾條永遠都是廣告項,比如搜尋「iphone6」,得到的結果如圖1所示:
圖1 google 搜尋iphone 6未進行廣告攔截示例
今天的目標就是將廣告項攔截掉,以後在使用google搜尋時,都不會再有這種礙眼的廣告排在前面了。
圖2 建立廣告***(content blocker)工程
blockerlist.json檔案裡面自動生成了幾行**,**中包含了乙個action和乙個trigger,每乙個action和trigger的組合構成一條規則。[[,
"trigger": }]]
1、action指定這條規則採用的攔截方式,type可選值為 「block」,「block-cookies」, 「css-display-none」,分別表示攔截資源檔案(比如css檔案,js檔案,資源)、攔截cookies,將指定html元素css的display屬性設定為none。而當type為css-display-none時,必須在action中加入「selector」的鍵值對,selector即是css selector,指定哪一些html元素的display屬性將被設定為none(即隱藏),當然,如果你不熟悉css selector,趕快去學習吧。
2、triggerr指定這條規則適用的**url,可以使用正規表示式,當然盡量精確的表示式,不要影響網頁瀏覽效率,畢竟content blocker是應用於整個瀏覽器和所有的**。
了解了這些,我們不難理解blocklist.json的含義,type為block,表明這是在阻止webkit.org/images/icon-gold.png這個的載入。當然,我們今天的目標是攔截google搜尋結果中的廣告項。
首先,對action type的選擇,這裡很明顯是對網頁內容的攔截,我們選擇的type值為css-display-none,接著獲取我們要隱藏的html元素,這裡我們借助mac版safari的網頁原始碼分析工具,開啟mac版safari,選擇develop menu下的simulator,然後選擇正在瀏覽的www.google.com.hk頁面,web inspector工具隨即將simulator上safari正在瀏覽的網頁原始碼陳列出來。什麼,沒有develop menu?在mac safari的preference裡選擇advance選項,將show develop menu in menu bar選項選擇就有了。接下來,我們很輕鬆地找到了廣告對應的div和它對應的id。
圖3 獲取外掛程式元素示意圖
有了div的id,我們將selector屬性設定為div#taw,指定id為taw的div,然後設定trigger的url-filter為google.com.hk/。[,
"trigger":
}激動人心的時刻到了,接下來讓我們見證成敗,執行工程,記住,不要選擇了content blocker的target,那樣子雖然也能將json嵌入safari,但是死活是無效的,也許是beta版的bug。
圖4 廣告攔截後搜尋示意圖
執行的程式一片空白,接下來我們要到系統設定介面,選擇safari->content blockers(內容***)->開啟你的外掛程式(如果已經開啟了,切記關掉後重新開啟一次)。回到瀏覽器,重新整理剛剛的google搜尋頁面,廣告項已經不在,且無論你在google中搜尋任何內容,你再也見不到排前面這一堆的廣告。
iOS下Safari點選事件失效的解決方法
前言 問題描述 當使用委託給乙個元素新增click事件時,如果事件是委託到 document 或 body 上,並且委託的元素是預設不可點選的 如 div,span 等 此時 click 事件會失效。可以使用下面的 在 ios 中進行測試。www.cppcns.com 程式設計客棧utf 8 aes...
ios入門9 函式
1.函式定義,多個形參用逗號隔開 c 一致 函式預設返回的是let型 func funcname 形參 returntype import cocoa 有參 func runnoob site string string 無參 func runnoob string 輸出為 www.baidu.co...
ios 實現9宮格
ios 的9宮格實現方式有很多種,這裡是參考了網上某某的demo後,幾乎照著做了一遍。這裡我採用訂製cell的方式來實現 這裡給出幾點注意事項 1,訂製的cell裡面的重用識別符號一定要和 中的識別符號一樣。不然重用機制不能生效 pragma mark pragma mark uitalbeview...