Window オブジェクト勉強中にハマった問題

ついにきた。ものすごいどっぷりとハマってしまった Window オブジェクトに関するある問題。
なんとか解決してうまくいったので今ものすごい達成感に満ち満ちているけど、でも勉強そのものは今日一日全然進んでない!解決したから嬉しいけど!
さて、その問題とは。

chrome で window.focus が動かない

テキストにあった簡単なコードがこれ。

var child = window.open("http://google.com", "child");
window.focus();

単純にウィンドウを新しく生成したあと、focus を元々のウィンドウにあてるというもの。単純。
なのに動かない。ウィンドウ生成まではうまくいったけど、フォーカスは新しいウィンドウにあたったまま。
自分の書き方がいけないのか?と思ってサンプルコードをそのままコピペしても動かず。
ググってみると setTimeout() を使えとか、blur() を使ったあとに focus() を使えとか、色々書いてあったけど試してみてもどれもうまくいかず。
そうこうしているときに stackoverflow で似たような現象が言及されているのを発見。
リンクをたどってみると、まさにこれだ!!!
Issue 1383 - chromium - window.focus from child window does not put focus back on the parent (opener) window. - An open-source project to help move the web forward. - Google Project Hosting
ちゃんと解決はしていないものの、回避策が書かれている。

javascript - window.focus() not working in Google Chrome - Stack Overflow
これに従うと、要は新しく元のウィンドウと同じ要素を持つウィンドウを作成して、元のウィンドウを閉じれば見せかけはうまくいくよ、とのこと。
(ちなみに問題発生からここに辿り着くまでに3時間ぐらいかかっている…)
これを書いてくれた人にものすごく感謝しつつその通りに書いてみたけど、動かない…。

function refocusWindow() {
  var newName = window.name + '-2'; // you'll want to customize this for your needs
  var options = ''; // again, customize for your situation
  var w = window.open('', newName, options);
  var elements = document.getElementById("everything").innerHTML;
  w.document.write(elements);
  window.close();
}  

の elements 取得のところで null の innerHTML なんてとれないよ、って言われる。
id は body に振ってあるしはてさて、と考えたところ、おそらくではあるけど document に元ウィンドウの要素が格納される前に getElementById() をしにいってしまっているのではないか、ということに辿り着き(ここでもいろんな Q&A サイトを参考にしました。先人の皆さんありがとう!!)、id を降るときに onload() を足してみた。

<body id = "everything" onload="refocusWindow();">

これでようやく思い通りに動いた!!!
こういった問題を克服した時の達成感ってコーディングの醍醐味だと思う。本当に。
でもこれにかまけていてテキストは全然進まなかった…。