1

我试图让我的扩展程序仅在隐身模式下工作。我似乎无法通过添加"incognito": "split"到我的 manifest.json 并在 background.js 中添加一个 if 语句来查找chrome.extension.inIncognitoContext.

编辑:

好的,所以我要做的是在隐身时更改我的用户代理标头。我这样做是基于这个:http ://elaineou.com/2016/02/19/how-to-use-chrome-extensions-to-bypass-paywalls/

它适用于上述链接,但在隐身模式下,我似乎无法让它适用于所有网站。这也不会被释放,我确实检查了允许的隐身按钮。

清单.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
}

背景.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"]);
}
4

1 回答 1

1

我猜你关心的是额外冗余的后台页面进程?

添加"incognito": "split"清单文件并以非隐身模式关闭扩展程序的后台页面:

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

内容脚本仍将在非隐身页面中运行。为了解决这个问题,只需在检查您的扩展程序是否在隐身模式下运行后退出您的代码(类似于上面的检查)。

注意:如果要发布扩展并且仅在隐身模式下有用,请考虑检查隐身模式是否已启用,如果已禁用,请提供说明。请参阅例如如何在隐身模式下启用我的 chrome 扩展程序?

于 2016-07-04T08:18:57.703 回答