web-dev-qa-db-ja.com

javascriptが無効になっている場合でも、ブラウザに `<noscript>`タグのコンテンツを無視させるにはどうすればよいですか?

少し意識が高すぎるので、私のブラウザには実行できるjavascriptのホワイトリストがあります。しかし、<noscript>タグのコンテンツは、ブラウザがそれらの厄介な分析1x1画像を読み込もうとするため、私のこの好みを与える可能性があります。

ブラウザに無視させる方法はありますか[1] javascriptが無効になっている場合でもこのコンテンツ?

必要に応じてオープンソースブラウザを交換できるため、どのブラウザについては触れません。 Chromium、Firefox、Operaなど。したがって、単一のブラウザに対応する回答は問題ありません。


[1]「無視する」とは、javascript-disabledステータスを与えるベイトコンテンツをリクエストしないことを意味します。 DOMから<noscript>を削除するユーザースクリプトを作成することはできますが、それまでには手遅れになる可能性があります。

2
Mindwin

あなたは次のようなせんさく好きなコードを意味します:

<noscript>
    <img height="1" width="1" alt="" style="display:none"
     src="https://www.facebook.com/tr?id=redacted&ev=PageView&noscript=1">
</noscript>

??

<noscript>の評価をオフにする方法はわかりませんが、上記の例では、部分文字列facebook.com/tr?を含むURLを使用してリクエストをキャンセルする短いブラウザ拡張機能を作成できます。

実行中のリクエストを監視、変更、またはブロックするためのChromeブラウザのAPIの説明については、 chrome.webRequest を参照してください。

これが実際の例です:

マニフェスト.json:

{
"name": "Website Blocker",
"description": "Keeps the browser from fetching tracking URLs",
"version": "1.0",
"manifest_version": 2,
"permissions": [
    "webRequest",
    "webRequestBlocking",
    "*://*.facebook.com/tr?*"
],
"background": {
    "scripts": [
        "script.js"
    ],
    "persistent": true
},
"icons": {
    "256": "world-blocker.png"
},
"converted_from_user_script": true
}

script.js:

"use strict"

console.log("Website Blocker is running!");
var re = new RegExp('https?://.*?\.?facebook.com/tr\?', 'i');

function checkUrl(details) {
    var cancel = !!details.url.match(re);
    if (!cancel)
        console.log(`Passing ${details.url}`);
    return {cancel: cancel};
}

chrome.webRequest.onBeforeRequest.addListener(
    checkUrl,
    {urls: ['*://*.facebook.com/tr?*']},
    ['blocking']
);

アイコンには何でも使用できます。または、それを削除して、ブラウザにダミーのものを提供させます。その唯一の役割は、chrome://extensionsページで拡張機能のエントリを強調表示することです。

拡張機能は、問題のページで正常に機能しました。ページのコンソールログには、画像フェッチに関するエラーメッセージnet::ERR_BLOCKED_BY_CLIENTがあります。同様に、[ネットワーク]タブの赤い障害線。

また、URLの事前フィルタリングはうまく機能しています。 JavaScriptは、特定のトラッキングURLに対してのみ呼び出されます。拡張機能のコンソールを確認すると、Facebookにアクセスしても、「Passing ...」というメッセージは表示されません。

1
George

UBlock Originを使用する場合、フィルター

##noscript

私はそれをテストしていませんが、動作するはずです。 uBlock Originフィルターはページが評価される前に実行されるため、これはshouldこれらの要素がフェッチされるのを防ぎます。

0
Gavin S. Yancey

お使いのブラウザでJavaScriptが有効になっているかどうかの情報が、実際にどこにあるのかわかりません。あなたは、特定のブラウザが、一部のブラウザが望んでいる以上のことをしているということは正しいです。 記事 あなたのコメントの1つにリンクしたのは、私の意見では、あなたの質問とは異なるトピックについてです。

質問で述べられているシナリオに関する限り、ページの一部であるリソースを要求するのはブラウザの通常の操作です。ブラウザは、URLを見るだけで実際のデータが読み込まれていることを認識しないため、実際に読み込む前に1つずつトラッキングピクセルを検出することはできません。これはまた、ブラウザが「背後で」行うことではなく、おそらくブラウザよりもそのグラフィックを配信したサードパーティの方が心配です。

私がこの問題で(今)見ることができる解決策は次のとおりです:

  • 外部ドメインからのすべてのリクエストをブロックします。あなたはすでにそれを行うことができるツールセットを知っているようです。たとえば、RequestPolicyを使用して、それに応じてスコープを設定できます。ただし、これは、アクセスしているのと同じドメインから配信されるピクセルの追跡からユーザーを保護するものではありません。
  • GreaseMonkeyスクリプトなどを使用して、DOMを変更し、noscript部分を削除します。このスクリプトがいつ読み込まれるかによっては、手遅れになる可能性があり、ブラウザもスクリプトを事前にキャッシュしようとする可能性があります。次の質問がこれに役立つ可能性があります: ページコンテンツが表示される前にgreasemonkeyスクリプトを実行する方法は?
  • テキストブラウザを使用します。
  • お気に入りのブラウザをフォークし、noscript部分を評価しないように変更します。これはおそらく最も安全なオプションですが、最も複雑でもあります。

特定のサイトでは、noscriptタグに貴重な情報が含まれている場合があります。コンテンツを見ないとそのコンテンツの性質を識別できず、追加のリソースが読み込まれる可能性があるため、ここで「悪い」コンテンツを特定する良い方法はないようです。いくつかの本当に主観的なルールを除いて。

JavaScriptが有効になっているかどうかに関する情報ではなく、追跡に関心がある場合は、さらに多くのテクノロジーが公開される可能性があります。 「canvas」要素のように、FlashとCookie。したがって、他の多くのコンポーネントが同じように危険である可能性がある場合に、ページのそのセクションを無視することによって、あなたの本当の目標は何であるかが問題になります。

0
Seth