web-dev-qa-db-ja.com

Chrome拡張機能でX-Frame-Options DENYを回避しますか?

私は Intab 、a Chrome新しいタブではなくインラインでリンクを表示できるようにする拡張機能の作成者です。シーン、ユーザーがクリックしたURLを読み込むのは単なるiframeです。

X-Frame-OptionsヘッダーをDENYまたはSAMEORIGINに設定するサイトを除いて、非常にうまく機能します。グーグルやフェイスブックのようないくつかの本当に大きなサイトは両方ともそれを使用しているので、ややジャンキーな体験ができます。

これを回避する方法はありますか? Chrome拡張機能を使用しているため、アクセスできるブラウザレベルのものはありますか?アイデアやヘルプを探しています!

43

Chromeは、HTTPリクエストをインターセプトおよび変更するための webRequest APIを提供します。 X-Frame-Optionsヘッダーを削除して、iframe内のページのインライン化を許可できます。

chrome.webRequest.onHeadersReceived.addListener(
    function(info) {
        var headers = info.responseHeaders;
        for (var i=headers.length-1; i>=0; --i) {
            var header = headers[i].name.toLowerCase();
            if (header == 'x-frame-options' || header == 'frame-options') {
                headers.splice(i, 1); // Remove header
            }
        }
        return {responseHeaders: headers};
    },
    {
        urls: [ '*://*/*' ], // Pattern to match all http(s) pages
        types: [ 'sub_frame' ]
    },
    ['blocking', 'responseHeaders']
);

マニフェストでは、webRequestおよびwebRequestBlocking権限に加えて、インターセプトするURLパターンを指定する必要があります。

60
Rob W