3

FirefoxのアドオンSDK(v1.9)を使用してビルドと拡張を行っています。

私のアプリケーションは、一致するURIのデータベースに基づいて追加(または変更)されるときにCookieを削除することになっています。

このタスクを実行するには、「cookie-changed」にオブザーバーを追加し、nsICookieを実装て一致するCookieを識別し、nsICookieManagerを実装して一致するCookieが見つかった場合にCookieを削除します。

問題

各Cookieが追加/変更されたWebサイト(URL)を知る必要があります。

4

1 に答える 1

5

残念ながら、Cookieマネージャーcookie-changedが情報がすでに失われているという通知を送信するまでに、Cookieマネージャーは、Cookieが追加されたホストのみを認識します(domainパラメーターが使用された場合、Cookieを設定するページのホストではない可能性があります)。そもそもURLがなかった可能性もあります。たとえば、Cookieが拡張子によって設定されている場合などです。

あなたができることは、http-on-examine-response通知のためにオブザーバーを登録することです。チャネルのSet-Cookieヘッ​​ダーとチャネルURLを確認できるため、cookie-changed後で通知が送信されたときに、どのWebサイトが責任を負っているのかがわかります。このようなもの:

var observer = require("observer-service");
observer.add("http-on-examine-response", function(subject, data)
{
  subject.QueryInterface(Ci.nsIHttpChannel);
  var cookieNames = [];

  // There can be more than one Set-Cookie header, cannot use getResponseHeader
  subject.visitResponseHeaders(function(header, value)
  {
    if (header.toLowerCase() == "set-cookie")
    {
      var match = /^([^\s=]+)=/.exec(value);
      if (match)
        cookieNames.push(match[1]);
    }
  });

  if (cookieNames.length)
  {
    var url = channel.URI.spec;

    // Remember that this url set the cookies or just clear the header
    if (!isAllowedToSetCookies(url, cookieNames))
      channel.setResponseHeader("Set-Cookie", "", false);
  }
});

:このコードはテストされていません。

ドキュメント:オブザーバー通知nsIHttpChannel

于 2012-09-07T07:23:56.763 に答える