2012-12-03 32 views
8

Tôi đang phát triển tiện ích mở rộng chrome sử dụng jQuery/Zepto trong tập lệnh nội dung. Bây giờ, phần mở rộng có nghĩa là để chạy trên mọi trang web, có nghĩa là một bản sao của jQuery/Zepto được tải trên mỗi tab người dùng mở ra.tiện ích chrome: chia sẻ một đối tượng giữa các tập lệnh nội dung và tập lệnh nền

Có cách nào để chia sẻ đối tượng jQuery/Zepto giữa các tập lệnh nội dung khác nhau không?

Tôi biết tập lệnh nội dung có thể giao tiếp với tập lệnh nền. Tôi đã hy vọng để có thể để cho kịch bản nền có quyền truy cập vào đối tượng jQuery và trả về một tham chiếu đến nó, cho mỗi kịch bản nội dung. Nhưng tôi nhận ra chỉ có các thông điệp JSON có thể được truyền giữa các tập lệnh nội dung và nền.

Có cách nào để đạt được những gì tôi muốn không?

+0

Không, bạn không thể chia sẻ các tham chiếu hàm trực tiếp giữa các tập lệnh nội dung. (câu hỏi trùng lặp: [Làm cách nào để chuyển dữ liệu giữa các tập lệnh nội dung của hai tab khác nhau?] (http://stackoverflow.com/questions/11597416/how-to-transfer-data-between-the-content-scripts-of- hai tab khác nhau)). –

+0

Đăng câu trả lời này và tôi sẽ chấp nhận câu trả lời. Btw, một câu hỏi - Tôi nghĩ ngày hôm qua rằng việc đưa jQuery vào trong mỗi trang có thể không thực sự là một vấn đề, bởi vì không giống như các tài nguyên thực sự của một trang web, điều này không cần phải tải xuống. Cho rằng kích thước trung bình của một trang web đang tiếp cận 1MB (khi tôi đọc trực tuyến), sự gia tăng tiêu thụ bộ nhớ không phải là một vấn đề mà tôi đã giải thích. Điều đó có vẻ hợp lý không? –

Trả lời

9

Nội dung tập lệnh trong các tab khác nhau không có quyền truy cập vào các đối tượng JavaScript của nhau.

Chrome hỗ trợ liên lạc giữa các tập lệnh nội dung và/hoặc trang nền thông qua chrome.runtime.sendMessage + .onMessage. Bởi vì tất cả các thư được tuần tự hóa JSON, đối tượng JavaScript không thể bị "rò rỉ" sang các ngữ cảnh khác theo cách này.

Vì vậy: Không, bạn không thể chia sẻ các đối tượng như jQuery với (các đoạn mã nội dung trong) các tab khác.

1

Execution environment của Content Scripts đảm bảo kịch bản nội dung có thể giao tiếp với nhau

Ex:

"content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["myscript.js","myscript1.js"] 
    } 
    ] 
} 

Một Individual DOM Environment nơi kịch bản nội dung ["myscript.js","myscript1.js"] tiêm Đảm bảo myscript1.js có quyền truy cập vào tất cả các nội dung (Chức năng, biến) của myscript.js, nhưng điều này dừng lại từ hai số Individual DOM Environment đang giao tiếp.

Có nói rằng, gì Hạn chế \ yêu cầu bạn thấy trong Content Scripts mà đòi hỏi yêu cầu nơi message passing nhu cầu background pages để truy cập DOM of injected pages?

Vui lòng xây dựng

Các vấn đề liên quan