2017-04-18 24 views
0

広告をブロックするプログラムを作成しています。私はthisページから広告サーバーのリストを見つけました。私の質問:javascriptを使用してウェブサイトのそのページからこれらの広告サーバーを検索することは可能ですか?拡張機能用のコードが必要です。javascriptの広告サーバーのリストを含むテキストファイルを検索する

+0

あなたがそれらの広告をブロックする方法についてのより正確なことができますか?タグを削除してリンク、画像、またはiframeを手動で無効にする予定の場合は、htmlのページで基本的な検索と置き換えが行われます。 – Kaddath

+0

@Kaddathはいリンクと画像を無効にします。あなたが本当に良いだろうという答えを与えることができたら、 – Vagif

+0

私の答えにあなたのための実例を加えました。より多くの要素を除外したい場合は、forループをさらに追加することができます。 – Waterscroll

答えて

0

あなたはこのようなものを使用することができます。

var sites = ['site1', 'site2', '...'], 
    sites_len = sites.length; 
var els = document.getElementsByTagName('*'); 

for (var i = 0, len = els.length; i < len; i++) { 
    var attr = ""; 
    switch (els[i].tagName.toLowerCase()) { 
     case 'iframe': 
     case 'script': 
     case 'img': 
      attr = 'src'; 
      break; 
     case 'link': 
     case 'a': 
      attr = 'href'; 
      break 
     default: 
      continue; 
    } 
    var attr_val = els[i].getAttribute(attr); 
    for (var j = 0; j < sites_len; j++) 
     if (sites[j].indexOf(attr_val) > -1) 
      els[i].parentNode.reamoveChild(els[i]); 
} 
0

デフォルトでは、WebページはJavaScriptの別のWebページのコンテンツにアクセスできません。これはcross-origin HTTP requestとして知られています。ウェブサイトでは、さまざまなウェブサイトがHTTPヘッダーAccess-Control-Allow-Originを使用してコンテンツにアクセスできるようにすることができますが、特にあなたのページではそうしていません。

あなたがあなたの代わりに、ブラウザの拡張機能を開発したりcrossorigin.meのようなプロキシを使用することができます先に行くとあなたがXMLHttpRequest cannot load https://pgl.yoyo.org/as/serverlist.php?hostformat=nohtml&showintro=1&startdate%5Bday%5D=&startdate%5Bmonth%5D=&startdate%5Byear%5D=. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

は、この制限を回避するためにエラーが発生しますしよう。

これは実施例である:

function loadAdServers(callback) { 
 
    const url = 'https://crossorigin.me/https://pgl.yoyo.org/as/serverlist.php?hostformat=nohtml&showintro=1&startdate%5Bday%5D=&startdate%5Bmonth%5D=&startdate%5Byear%5D='; 
 

 
    const request = new XMLHttpRequest(); 
 
    request.open('GET', url); 
 
    request.addEventListener('load', function() { 
 
    callback(request.response.split('\n').filter(x => x)); 
 
    }); 
 
    request.send(); 
 
} 
 

 
function removeElement(element) { 
 
    if (element.parentElement) { 
 
    element.parentElement.removeChild(element); 
 
    } 
 
} 
 

 
function removeAdElements(adServers) { 
 
    for (const img of document.querySelectorAll('img')) { 
 
    for (const adServer of adServers) { 
 
     if (img.src.indexOf(adServer) >= 0) { 
 
     removeElement(img); 
 
     } 
 
    } 
 
    } 
 
    for (const a of document.querySelectorAll('a')) { 
 
    for (const adServer of adServers) { 
 
     if (a.href.indexOf(adServer) >= 0) { 
 
     removeElement(a); 
 
     } 
 
    } 
 
    } 
 
} 
 

 
loadAdServers(removeAdElements);
<img src="http://101order.com/company.logo"> 
 
    <a href="http://101order.com/">Link</a> 
 
    <a href="http://stackoverflow.com">stackoverflow</a>

それはリストをロードし、要素をフィルタリングするためにいくつかの時間がかかります。

+0

あなたの答えに感謝します。しかし、私はこれをエクステンションに入れようとしましたが、機能しませんでした。拡張機能でこれをどのように活用するか考えていますか? – Vagif

+0

申し訳ありませんが、私は以前に拡張機能を行ったことがありません。私はあなたが 'https:// crossorigin.me'を使う必要はないと思うが、私は拡張からDOMにアクセスする方法を知らない。 – Waterscroll

関連する問題