コンテンツスクリプトでは、開かれたすべてのポップアップウィンドウを追跡するのにMap
を使用しています。次のようにMap
におけるキーと値のペアが構成されている:Chromeのコンテンツスクリプトでキーマップが奇妙に動作する
- キー - 問題は、時々
Map.prototype.has()
とMap.prototype.get()
であるいくつかの関連データ
// content.js
let map = new Map();
let popup = window.open('https://www.google.com');
let data = {};
map.set(popup, data);
// retrieve data later
window.setTimeout(() => {
// should return true, but sometimes return false
console.log(map.has(popup));
// should return {}, but sometimes return undefined
console.log(map.get(popup));
}, 3000);
追加のキーと参照popup
は常に何らかの理由で「等しい」と見なされていないようです。そして、このあいまいな状況はコンテンツスクリプトにのみ存在するように見えます。上記のコードがブラウザのコンソールで実行される場合は、map.has()
とmap.get()
となります。常にが正しい値を返します。
私の質問は次のとおりです。なぜこれが起こったのですか?それは私が気づいていなかったコンテンツスクリプトの根底にあるメカニズムによって引き起こされたのでしょうか?
実際のコードはIIFEでラップされていますか、実際はグローバルスコープの変数ですか? 'popup'がページ上の何かによって再割り当てされる可能性はありますか? – loganfsmyth
@loganfsmythデバッグ用にこの単純化されたバージョンを構築しました。だから私のコンテンツスクリプトには本当のコードがあります。 IIFEのラッピングはありません。他のコンテンツスクリプトはありません。また、エクステンションにはバックグラウンドスクリプトもありません。 – Microloft
これはブラウザのバグかもしれませんが、 'const'を試してみてください。実際には、値を再割り当てしない場合に使用する必要があります。 – wOxxOm