3

さまざまなサイトで XMLHttpRequest を作成する Chrome 拡張機能を開発していますが、ブラウザが「withCredentials」フィールドを無視していることに気付きました。これが true に設定されているか false に設定されているかに関係なく、応答は常に同じであり、ブラウザーを介した単純な URL ナビゲーションによって要求された Web ページが含まれています。

マニフェスト:

"background": {
    "scripts": ["jquery.min.js", "daemon.js"],
    "persistent": true
},
"permissions": [
    "<all_urls>"
]

daemon.js の内部:

var xhr = new XMLHttpRequest();
xhr.open("GET", 'http://stackoverflow.com/', true);
xhr.withCredentials = false;
xhr.onload = function(e) {
    $('body').html(xhr.responseText);
}
xhr.send();

これにより、 withCredentials を false に設定しているにもかかわらず、stackoverflow.com がいくつかの DOM 要素内に私のユーザー名で読み込まれます。私の質問は次のとおりです。

  1. これは意図したとおりの動作ですか?
  2. はいの場合、これに対する回避策はありますか? 拡張機能の内部から HTTP リクエストを行いますが、Cookie やその他のセッション情報は無視しますか? (更新: クライアント側の証明書や http 認証などのすべての資格情報を無視します)

最新 (22.0.1229.79 m) の Chrome を使用しています。

4

2 に答える 2

2

はい、これ(送信されるクレデンシャルのアクション)は意図された動作です。XMLHttpRequestレベル2仕様#withCredentialsは次の ように述べています(これはセクションの最後の行です)。

withCredentials属性は、同一生成元のリソースをフェッチする場合には効果がありません。

どうやら、十分な権限(マニフェストファイル)を使用してChrome拡張機能のコンテキストでコードを実行すると、プロパティは同じオリジンからリクエストが行われた場合と同じように動作します。

バックグラウンドページからリクエストを取得しても問題が解決したかどうかを確認しましたが、役に立たないと結論付けました。"permissions"他のサイトが(ヘッダーを介して)CORSをサポートしている場合、解決策はマニフェストファイルのセクションでサイトについて言及しないことです。この回答では、他のすべてのオプションが強調表示されています。

いずれの方法も満足のいくものではない場合、質問2の答えは「いいえ、回避策はありません」です。

于 2012-10-02T12:00:20.130 に答える