2

にデータを送信するFacebook用のプラグインを作成しましたtesting-fb.local。ユーザーがログインしている場合、リクエストは通過します。

ワークフローは次のとおりです。

  1. ユーザーはからログインしますtesting-fb.local
  2. クッキーは保存されます
  3. $.ajax()Chrome拡張機能から起動された とき
    • Chrome拡張機能はchrome.webRequest.onBeforeSendHeaders
    • Chrome拡張機能はからのCookieをチェックします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ヘッダー が、ユーザーのシステムでCookieを作成するために使用されるHTTPリクエストに応答してサーバーによって送信されるためです。

すべてのCookieAPI()メソッド非同期であることに注意してください。コールバックが機能を促進することを確認してください。

このサンプルデモンストレーションでワークフローを複製しようとしました

デモンストレーション

バックグラウンドページは、 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ページへの単純な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 Callのリクエストヘッダーを追跡し、Cookie情報を変更することができました。さらに情報が必要な場合は、お知らせください。

于 2012-12-09T04:58:52.203 に答える