回答

6

不Greasemonkey的插入包裝 成JavaScript代碼或添加 它作爲任何事件處理程序,如 的window.onload源?

GM收聽DOMContentLoaded事件(基本DOM Ready)here。然後包裝用戶腳本代碼並將其插入沙箱中,here

+0

感謝您指出的代碼。何時觸發DOMContentLoaded事件,是作爲事件處理程序調用的userscript的包裝器還是作爲源代碼的一部分插入的包裝器?換句話說,第309行,this.evalInSandbox(「(function(){」+ scriptSrc +「})()」,url,sandbox,script)執行包裝器或將包裝器插入原始JavaScript代碼? – Paul 2010-07-15 01:02:20

+1

第一個GM收聽DOMContentLoaded事件,當發生這些事件時,GM確定應該運行哪些腳本(通過@include/@ exclude規則,並檢查url是否爲'greasemonkeyable'),然後從腳本中獲得源代碼(這只是一個字符串)應該被運行包裹到匿名自執行函數(通過字符串連接),最後在匿名自執行函數(運行userscript)上執行evalInSandbox。 – erikvold 2010-07-15 18:26:33

+0

因此,腳本在注入時執行。這是對的嗎? – Paul 2010-07-15 20:13:37