web-dev-qa-db-fra.com

Se déplacer X-Frame-Options DENY dans une extension Chrome?

Je suis l'auteur de Intab , une extension Chrome qui vous permet d'afficher un lien en ligne par opposition à un nouvel onglet. Il n'y a pas beaucoup de choses fantaisistes derrière le scènes, c'est juste un iframe qui charge l'URL sur laquelle l'utilisateur a cliqué.

Cela fonctionne très bien, sauf pour les sites qui définissent l'en-tête X-Frame-Options sur DENY ou SAMEORIGIN. Certains très gros sites comme Google et Facebook l'utilisent tous les deux, ce qui en fait une expérience un peu saccadée.

Y a-t-il un moyen de contourner cela? Étant donné que j'utilise une extension Chrome, y a-t-il des éléments au niveau du navigateur auxquels je peux accéder qui pourraient aider? Vous cherchez des idées ou de l'aide!

43

Chrome propose l'API webRequest pour intercepter et modifier les requêtes HTTP. Vous pouvez supprimer le X-Frame-Options en-tête pour autoriser l'inclusion de pages dans un 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']
);

Dans le manifeste, vous devez spécifier les autorisations webRequest et webRequestBlocking, ainsi que les modèles d'URL que vous avez l'intention d'intercepter.

60
Rob W