2016-07-04 21 views
1

Ich versuche, meine Erweiterung nur im Inkognito-Modus arbeiten zu lassen. Ich kann es anscheinend nicht funktionieren, indem ich "incognito": "split" zu meinem manifest.json hinzufüge, und eine if-Anweisung in der background.js hinzufügt, die nach chrome.extension.inIncognitoContext sucht.Ändern Sie User-Agent-Header nur im Inkognito-Modus mit einer Chrome-Erweiterung

Edit:

Okay, also, was ich versuche zu tun, meinen User-Agenten-Header ändern, während nur in inkognito. Ich mache dies basierend auf diesem: http://elaineou.com/2016/02/19/how-to-use-chrome-extensions-to-bypass-paywalls/

Es funktioniert für den oben genannten Link, aber ich kann nicht scheinen, es für alle Website im Inkognito-Modus zu arbeiten. Dies wird auch nicht freigegeben, und ich habe die incognito-Schaltfläche erlaubt.

manifest.json

{ 
    "name": "Incognito Chrome Extension", 
    "version": "0.1", 
    "description": "This is an incognito chrome extension.", 
    "incognito": "split", 
    "permissions": ["webRequest", "webRequestBlocking", 
        "http://localhost:3000/", 
        "http://*/*", 
        "https://*/*" 
        ], 
    "background": { 
    "scripts": ["background.js"] 
    }, 
    "manifest_version": 2 
} 

Background.js

var ALLOW_COOKIES = [""]; 
if(chrome.extension.inIncognitoContext){ 
    function changeRefer(details) { 
    foundReferer = false; 
    foundUA = false; 

    var reqHeaders = details.requestHeaders.filter(function(header) { 
     // block cookies by default 
     if (header.name !== "Cookie") { 
     return header; 
     } 

     allowHeader = ALLOW_COOKIES.map(function(url) { 
     if (details.url.includes(url)) { 
      return true; 
     } 
     return false; 
     }); 
     if (allowHeader.reduce(function(a, b) { return a || b}, false)) { return header; } 

    }).map(function(header) { 

     if (header.name === "Referer") { 
     header.value = "https://www.google.com/"; 
     foundReferer = true; 
     } 
     if (header.name === "User-Agent") { 
     header.value = "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko"; 
     foundUA = true; 
     } 
     return header; 
    }); 

    // append referer 
    if (!foundReferer) { 
     reqHeaders.push({ 
     "name": "Referer", 
     "value": "https://www.google.com/" 
     }); 
    } 
    if (!foundUA) { 
     reqHeaders.push({ 
     "name": "User-Agent", 
     "value": "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko" 
     }); 
    } 
    console.log(reqHeaders); 
    return {requestHeaders: reqHeaders}; 
    } 

    function blockCookies(details) { 
    for (var i = 0; i < details.responseHeaders.length; ++i) { 
     if (details.responseHeaders[i].name === "Set-Cookie") { 
     details.responseHeaders.splice(i, 1); 
     } 
    } 
    return {responseHeaders: details.responseHeaders}; 
    } 

    chrome.webRequest.onBeforeSendHeaders.addListener(changeRefer, { 
    urls: ["<all_urls>"], 
    types: ["main_frame"], 
    }, ["requestHeaders", "blocking"]); 

    chrome.webRequest.onHeadersReceived.addListener(blockCookies, { 
    urls: ["<all_urls>"], 
    types: ["main_frame"], 
    }, ["responseHeaders", "blocking"]); 
} 

Antwort

1

Ich denke, dass Ihr Anliegen die zusätzliche redundante Hintergrund Seite Prozess ist?

"incognito": "split" in der Manifest-Datei hinzufügen und schließen Sie die Hintergrundseite der Erweiterung in nicht-Inkognito-Modus:

// background page or event page: 
if (!chrome.extension.inIncognitoContext) { 
    window.close(); 
} 

Inhalt Skripte werden nach wie vor in nicht-Inkognito-Seiten ausgeführt werden. Um dem entgegenzuwirken, beenden Sie einfach Ihren Code, nachdem Sie überprüft haben, ob Ihre Erweiterung im Inkognito-Modus ausgeführt wird (ähnlich der obigen Überprüfung).

Hinweis: Wenn die Erweiterung veröffentlicht wird und nur im Inkognito-Modus nützlich ist, prüfen Sie, ob der Inkognito-Modus aktiviert ist und bieten Sie Anweisungen an, wenn sie deaktiviert ist. Siehe z.B. How can I enable my chrome extension in incognito mode?

+0

Hmm, das hat auch nicht funktioniert. Können Sie meine aktualisierte Frage überprüfen? Dies hängt möglicherweise nicht damit zusammen, dass es sich um einen Inkognito-Modus handelt. –

+0

@JackRothrock Incognito ist standardmäßig deaktiviert. Haben Sie den Inkognito-Modus aktiviert? –

+0

Ja. Wenn ich es aus dem Inkognito herausnehme - indem ich das if entferne - scheint es zu funktionieren, indem es die Cookies deaktiviert, aber es scheint nicht zu User-Agent-Überschriften zu wechseln. Es funktioniert bei einzelnen Sites, aber nicht bei den http (s)?: // */* –