汚染されているグローバルオブジェクトを回避し、ピュアなグローバルオブジェクトを得る方法

いつ使うのか感があるけど…。

例えば、console.log() が独自に上書きされているページに対し、ピュアな console.log() を利用したブックマークレットを作るような場合が考えられるだろうか。

// 元々のページで window.console オブジェクトが破壊されている
console = {
  log: (text) => {
    // 独自の console.log() 的な処理…
  }
  // console.error() などもなくなってしまっている
}

このようなページで、通常の window.console を取り戻す方法だ。

仕組みは簡単で、空のインラインフレームを生成し、その中からグローバルオブジェクトを取り出せば良い。

// iframe 要素を生成し body 要素に突っ込む
const iframe = document.body.appendChild(document.createElement('iframe'));
// iframe 要素は非表示にしておく
iframe.style.display = 'none';
// 「contentWindow」配下からクリーンな console を得る
window.console = iframe.contentWindow.console;

覚えておいたら使えるかもしれない?