javascript - 在 Chrome 扩展中执行 jQuery.ajax 请求时更改 cookie

标签 javascript jquery google-chrome-extension

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

这是工作流程:

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

请求成功。

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

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 中,我将代码放在上面,但看起来无法运行..

综上所述,我还不清楚:

  • 我应该写什么这里发生了一些事情
  • 如果这个策略有效
  • 我应该将此代码放在哪里?

最佳答案

Chrome 更改了要发送的 Set-Cookies header ,我相信您想为 HTTP 请求发送自定义 Cookie header ,因为 Set-Cookie header由服务器发送以响应 HTTP 请求,用于在用户系统上创建 cookie。

请记下全部Cookie API() methodsasynchronous ,确保您的回调驱动您的功能;

我尝试通过此示例演示复制您的工作流程

演示

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

background.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 page 的简单 AJAX 调用

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

ma​​nifest.json

确保 list 具有所有权限

{
  "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 调用的请求 header 并修改 cookie 信息,如果您需要更多信息,请告诉我。

关于javascript - 在 Chrome 扩展中执行 jQuery.ajax 请求时更改 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13780589/

相关文章:

javascript - 在内容脚本中获取当前选项卡 ID 的方法 - chrome 扩展

javascript - 我希望动画在事件状态下触发并在事件状态消失后继续

javascript - 直接连接notepad++和浏览器textarea

javascript - 我需要使用 JavaScript 循环运行一个有效的 Google App 脚本。 (PDF邮件合并)

javascript - 每 20 秒显示 5 秒后如何关闭该元素

javascript - Chrome 扩展程序 : How to display tab objects?

javascript 模式来确定某人何时选择页面上的文本

javascript - 使用从 JSON 派生的 Knockout 可观察量来动态更新 View

jquery - 根据滚动位置更改 div 颜色

javascript - 从选项卡获取 HTML 内容