文章轉載自公衆號劉凱里前端
一個陽光明媚的週末,透光的窗簾把我從睡夢中叫醒,大腦說今天是週六,能夠慵懶個一上午,因而開心地打開個人 Mac 準備看兩集 Rick and Morty 再起牀洗漱。chrome
我火燒眉毛打開了對應的網站,發現瀏覽器提示 No internet,這才發現由於個人動做太過於行雲流水,電腦還沒來得及連上 wifi 瀏覽器
科普:Chrome 瀏覽器是 Google 家的官方瀏覽器,使用體驗全世界南波萬。當用戶在無網絡時訪問某一網址,瀏覽器會提示「無網絡連接」(也就是上面這張圖),按下空格鍵,就會喚醒一個小恐龍跑步刷分的遊戲。 若是在有網絡鏈接時也想玩的話,能夠直接在地址欄輸入:chrome://dino網絡
出於職業自己的敏感和好奇,我忽然心生疑問:這應該是用 JS 作的吧? 我順勢打開控制檯,不如先看一下全部的全局變量?前端工程師
239 個...太多了,我可沒這個耐心 我中止了操做,開始思考這一切的可行性:函數
再看一下上面這張圖,不難發現,這 239 個全局變量,有不少都是老朋友了,name、history、location、onclick、onerror... 這些變量明顯和這隻小恐龍沒啥關係,打印出來純粹是來充個數,還浪費了我找目標的時間,因此我遇到了第一個問題:如何快速找到由開發者自定義的全局變量? 工具
假如我有一個正常的 window...不對,不用假如,新開一個空窗口不就得了 在新打開窗口的控制檯,我獲得了這樣的結果: 網站
怎麼把這 196 個原生的全局變量拿過來呢?複製粘貼就太 low 了,讓我想一想... url
在原有窗口的基礎上,再搞一個新窗口...這不就是 iframe 嗎!iframe 雖然沒有 window ,可是它有 contentWindow ,原則上來講,屬性差異應該不大。因此如今只須要建立一個 iframe,拿它裏面 contentWindow 的全局變量去過濾當前 window 的全局變量,就能夠篩選出那多餘的 43 個嫌疑人了。 因而我在控制檯敲出了下面這些代碼 prototype
誒,怎麼是** 45 **個?比預期的多了 2 個,難道 window 裏面還包含哪些 contentWindow 裏面沒有的變量嗎?因而我把相同的代碼拿去 url 爲 about:blank
的窗口下執行了一遍,發現了罪魁禍首:
當我凝視着這個飛奔的無敵小恐龍時,我忽然以爲...一切變得...