2

我为 facebook 编写了一个插件,可以将数据发送到testing-fb.local. 如果用户登录,请求就会通过。

这是工作流程:

  1. 用户登录自testing-fb.local
  2. 存储 Cookie
  3. 何时$.ajax()从 Chrome 扩展程序中触发
    • Chrome 扩展程序监听chrome.webRequest.onBeforeSendHeaders
    • Chrome 扩展程序检查来自chrome.cookies.get
    • Chrome 更改Set-Cookies要发送的标头

请求通过。

我写的这部分代码应该是这样的:

function getCookies (callback) {
  chrome.cookies.get({url:"https://testing-fb.local", name: "connect.sid"}, function(a){
    return callback(a)
  })
}

chrome.webRequest.onBeforeSendHeaders.addListener(
  function(details) {
    getCookies(function(a){

// Here something happens

    })
  },
  {urls: ["https://testing-fb.local/*"]},
  ['blocking']);

这是我的manifest.json

{
  "name": "test-fb",
  "version": "1.0",
  "manifest_version": 1,
  "description": "testing",
  "permissions": [
    "cookies",
    "webRequest",
    "tabs",
    "http://*/*",
    "https://*/*"
  ],    
  "background": {
    "scripts": ["background.js"]
  },
  "content_scripts": [
        {
          "matches": ["http://*.facebook.com/*", "https://*.facebook.com/*"],
          "exclude_matches" : [
            "*://*.facebook.com/ajax/*",
            "*://*.channel.facebook.tld/*",
            "*://*.facebook.tld/pagelet/generic.php/pagelet/home/morestories.php*",
            "*://*.facebook.tld/ai.php*"
          ],
          "js": ["jquery-1.8.3.min.js", "allthefunctions.js"]
        }
      ]
}

allthefunction.js我有 $.ajax 调用,并且background.js是我将代码放在上面但看起来不运行的地方..

总而言之,我还不清楚:

  • 我应该写什么在这里发生了一些事情
  • 如果这个策略行得通
  • 我应该把这段代码放在哪里?
4

1 回答 1

5

Chrome changes the Set-Cookies header to be sent,我相信您想为 HTTP 请求发送自定义 Cookie 标头,因为Set-Cookie 标头 是服务器响应 HTTP 请求而发送的,该请求用于在用户系统上创建 cookie。

请注意所有Cookie API() 方法都是异步的,确保您的回调驱动您的功能;

我尝试使用此示例演示复制您的工作流程

示范

后台页面查找对http://www.w3schools.com/html/default.asp的所有请求并修改 cookie 详细信息

背景.js

// Adding Event Listener for Changing Cookie Details in Header
chrome.webRequest.onBeforeSendHeaders.addListener(function (details) {

    // Look for header details here
    detail = "requestHeaders";
    headers = details[detail];

    // Iterate through all headers information
    for (header in headers) {

        // Stop at Cookie Information
        if (headers[header].name == "Cookie") {

            // Do your desired functionality either modifying/delet cookies etc

            //chrome.cookies.get({url:"<your url>", name: "<your parameter>"}, function(Cookies){
            //console.log("Cookies  "+Cookies);
            return {
                requestHeaders: details.requestHeaders
            };
            //});


        }
    }

},
//Sample URL used
{
    urls: ["http://www.w3schools.com/html/default.asp"]
},

// Block Web Request and request for header information

['blocking', "requestHeaders"]);

allfunctions.js

对asp页面的简单AJAX调用

 //Do an AJAX Call
 function ajaxCall() {
     $.post("http://www.w3schools.com/html/default.asp", function (data) {
         console.log("POST Completed " + data);
     });
 }
 ajaxCall();

清单.json

确保清单具有所有权限

{
  "name": "test-fb",
  "version": "1.0",
  "manifest_version": 2,
  "description": "testing",
  "permissions": [
    "cookies",
    "webRequest",
    "tabs",
    "<all_urls>",
    "webRequestBlocking" 
  ],    
  "background": {
    "scripts": ["background.js"]
  },
  "content_scripts": [
        {
          "matches": ["<all_urls>"],
          "js": ["jquery.js", "allthefunctions.js"]
        }
      ]
}

有了这个,我能够跟踪 AJAX 调用的请求标头并修改 cookie 信息,如果您需要更多信息,请告诉我。

于 2012-12-09T04:58:52.203 回答