2016-07-04 2 views
1

シークレットモードでは、自分の拡張機能を動作させようとしています。私はそれを"incognito": "split"を私のmanifest.jsonに追加して、background.jsのifステートメントをchrome.extension.inIncognitoContextを探して追加することで、動作させることはできません。Chrome拡張機能を使用して、シークレットモードでのみユーザーエージェントのヘッダーを変更します。

編集:

わかりましたので、私がやろうとしていることだけでシークレットモードでの実行をしながら、私のユーザーエージェントのヘッダーを変更しています。私はこれに基づいてこれをやっています:http://elaineou.com/2016/02/19/how-to-use-chrome-extensions-to-bypass-paywalls/

上記のリンクで動作しますが、シークレットモードではすべてのウェブサイトで動作するようには見えません。これも公開されず、シークレットボタンで許可が許可されています。

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"]); 
} 

答えて

1

私はあなたの懸念は、余分な冗長背景ページ・プロセスであることを推測しますか?

マニフェストファイルに"incognito": "split"を追加し、非シークレットモードでの拡張の背景ページを閉じる:

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

コンテンツスクリプトは、まだ非シークレットページで実行されます。これに対処するには、拡張機能がシークレットモードで動作しているかどうかをチェックした後にコードを終了します(上記のチェックと同様)。

注:拡張機能が公開され、シークレットモードでのみ有効な場合は、シークレットモードが有効かどうかを確認し、無効になっている場合は手順を提示することを検討してください。例えば、 How can I enable my chrome extension in incognito mode?

+0

うーん、それもうまくいきませんでした。更新された質問を確認できますか?これはシークレットモードでは関係ありません。 –

+0

@JackRothrockシークレット機能はデフォルトでは無効になっています。シークレットモードを有効にしましたか? –

+0

うん。私がシークレットから取り除くと、ifを削除することによって、クッキーを無効にすることによって動作するように見えますが、ユーザーエージェントの見出しに変更されないようです。 http:// */* –

関連する問題