公司的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?