專冶各類H5的嵌入垃圾廣告!

公司的H5頁面挨嵌入各類各樣的廣告,有時有,有時沒有,這個很煩人,問過許多大咖,有幾種說法和幾種解決方法javascript

1.DNS劫持 。css

HTML5頁面被電信運營商進行DNS劫持植入廣告,建議打電話給電信運營商。這招我試過,無論用,他們都在踢皮球,究竟是運營商或代理商乾的,,仍是內部人幹,很難追求到源頭。html

2.HTTP劫持 。java

可能也有這個緣由,建議使用HTTPS, HTTPS成本不算高, 一年幾百塊至幾千塊的,能有效攔截嵌入廣告。 但不完全, 照樣有嵌入廣告的狀況,具體緣由不詳。git

3.第三方包植入廣告。github

不排除第三方的包有植入廣告的代碼,但這個很差找,一個項目的npm包,可能1000多個~~..npm

難道沒有更好的辦法了嗎? 有~~這個是別人那裏扒過來的ui

<!-- 反運營商劫持 S -->

<style type="text/css"> html { display:none; } </style>
<script> if( self == top ) { document.documentElement.style.display = 'block' ; } else { top.location = self.location ; } </script>

<!-- 反運營商劫持 E -->

複製代碼

但實際運用的過程,不起做用,多是奸商改了規則~~。spa

通過反覆研究,那些嵌入的代碼,的確規則時常變化的,~~但有同樣東西是不變的,就是iframe,每段嵌入代碼都會iframe代理

<html>
<body>
...
<!-- 嵌入的廣告代碼 開始 -->
<div id="xxx_id">
...
<iframe id="xxx" src="xx.com"...></iframe>
</div>
<!-- 嵌入的廣告代碼 結束 -->
</body>
</html>
複製代碼

因此個人代碼是這樣寫的。

css代碼

/* 搶先 隱藏 iframe */
body iframe {display: none;}
複製代碼

js代碼

var del_times = 0, deTimer = null;
		function adGo() {
			var iframe = document.getElementsByTagName('iframe')[0];
			if(iframe){
				console.log(iframe)
				var bodyNode = {tagName:''}, iframeParent, targetNode = iframe.parentNode;
				while (bodyNode.tagName != 'BODY'){
					bodyNode = targetNode;
					if(bodyNode.tagName != 'BODY'){
						iframeParent = targetNode;
						targetNode = targetNode.parentNode;
					}
				}
				if(iframeParent) //若是iframe有父類
					bodyNode.removeChild(iframeParent);
				else
					bodyNode.removeChild(iframe);
			}
			del_times++;
			if (del_times > 10) window.clearInterval(deTimer)
		}
		
		//搶先 刪除 嵌入廣告
		(function(){adGo();}())
		
		deTimer = self.setInterval(adGo, 200);
複製代碼

把代碼加到<body></body>

通過一星期運行,效果棒棒的,媽媽不再要擔憂我H5的彈出廣告了。

github源代碼 你敢不敢給我star?

相關文章
相關標籤/搜索