Trả lời

6

Liệu Greasemonkey chèn wrapper vào nguồn mã JavaScript hoặc thêm nó như bất kỳ xử lý sự kiện như window.onload?

GM nghe sự kiện DOMContentLoaded (về cơ bản DOM đã sẵn sàng) here. Sau đó, kết thúc mã người dùng và chèn mã đó vào hộp cát, here.

+0

cảm ơn vì đã trỏ mã. khi sự kiện DOMContentLoaded được kích hoạt, là trình bao bọc của usercript được gọi là trình xử lý của sự kiện hay là trình bao bọc được chèn vào như một phần của mã nguồn? nói cách khác, dòng 309, this.evalInSandbox ("(function() {" + scriptSrc + "})()", url, sandbox, script), thực hiện trình bao bọc hoặc chèn trình bao bọc vào mã javascript ban đầu? – Paul

+1

GM đầu tiên lắng nghe các sự kiện DOMContentLoaded, khi những điều đó xảy ra, GM xác định người dùng nên chạy (thông qua quy tắc @ include/@ exclude và kiểm tra xem url có phải là 'greasemonkeyable') hay không, sau đó mã nguồn từ usercript (chỉ là chuỗi tại thời điểm này) mà nên được chạy được bao bọc trong một chức năng tự thực hiện ẩn danh (thông qua nối chuỗi), và cuối cùng là một evalInSandbox trên chức năng tự thực hiện ẩn danh (chạy bản ghi người dùng). – erikvold

+0

Vì vậy, kịch bản được thực hiện tại thời điểm nó được tiêm. Nó có đúng không? – Paul