道歉,如果標題模糊,但它不是最容易描述的問題。目前,如果要在瀏覽器中打包/重載內置函數(例如XmlHttpRequest.prototype.open = function(){return oldOpen(...)}
),並且希望在頁面中的任何腳本執行之前執行此操作,則需要使用之前執行的瀏覽器擴展/插件文檔開始被解析。關鍵是,瀏覽器擴展的用戶同意安裝它們的轉換率通常較低。我很樂意能夠使用小書籤來做同樣的事情(Pinterest已經表明小書籤不是他們的障礙!)。但是,可惜的是,booklets按照定義在文檔加載後運行很久。「重新加載」頁面以模仿預加載代碼注入的JS庫?
我想做什麼,我認爲是理論上可能的,是假裝頁面重新加載,但已插入腳本。該過程將如下所示:
- 通過XHR從
window.location
下載原始文檔。 - 刪除DOM中的所有元素,包括所有腳本標記。也許會拋出一個不錯的啓動畫面以獲得良好的用戶體驗。
- 清除所有超時和時間間隔(在FF和Chrome上ID似乎從1開始計數,因此不需要先驗知識AFAIK)。
- 刪除/取消定義
window
和document
中的所有密鑰,這些密鑰在空白文檔中不存在...其中,考慮到可能安裝了一些擴展,可能需要一些iframe技巧/消息來實際獲取參考空白文檔。 - 將腳本注入到現在空白的文檔中。
- 重新插入XHR'd原始文檔中的所有標籤,包括腳本,然後應該在新的上下文中重新加載並重新執行腳本。
- 取下閃屏,你很好走!
現在,我會非常樂意嘗試這個,並開放它的源碼,但有沒有人嘗試過這樣的事情?這將是很多工作,我寧願不重新發明輪子,除非我們現在使用的是相當於棍棒上的方形巨石。
我覺得你可以用iframe來實現這一點。 – Hello71
作爲參考,這是項目:https://github.com/bpartridge/angryponies – btown