2011-04-25 90 views
10

Dưới đây là kịch bản:Làm thế nào để xác định mô hình kết hợp khác nhau cho nhiều kịch bản nội dung trong file manifest.json của cùng một phần mở rộng

Kịch bản 1: tôi muốn tiêm kịch bản nội dung khác nhau vào các trang khác nhau dựa trên Tên miền URL.

Đối với ví dụ: Tiêm cs1.js nội dung kịch bản vào www.a.com nhưng tiêm cs2.js nội dung kịch bản vào www.b.com. Cả hai tập lệnh nội dung cs1.js và cs2.js đều là một phần của cùng một tiện ích mở rộng chrome. Làm cách nào tôi có thể chỉ định các mẫu đối sánh khác nhau (trong phần "đối sánh" trong khi xác định "content_scripts" trong tệp manifest.json) để một tập lệnh được tiêm vào một trang trong khi trang khác được tiêm vào trang khác.

Kịch bản 2: Làm thế nào tôi có thể đề cập, nếu dưới một tên miền phụ của nói www.a.com, tôi muốn tiêm kịch bản nội dung vào tất cả các trang trong lĩnh vực trừwww.b.a.com (tất cả tên miền phụ khác cần phải được tiêm với tập lệnh nội dung). Làm cách nào để chỉ định mẫu đối sánh cho trường hợp này.

Xin cảm ơn trước.

Trả lời

9

Chỉ định content_scripts trong manifest.json có một chút hạn chế. Mặc dù bạn có thể chỉ định các mẫu đối sánh khác nhau, nhưng bạn chỉ có thể thực hiện một chuỗi tệp có thể.

Để đạt được những gì bạn muốn, bạn sẽ cần thiết lập background_page để có thể hiểu URL trang và thực thi các tập lệnh nội dung khi bạn thấy phù hợp.

Ba phương pháp khác nhau có thể là:

  1. Sử dụng của content_scripts manifest để phù hợp với tất cả các URL có thể và thực hiện một kịch bản nội dung đơn giản để gửi yêu cầu thông điệp tới trang nền qua chrome.extension.sendRequest(). Trang nền nghe tin nhắn với số chrome.extension.onRequest.addListener(), nhận được thông báo, diễn giải URL của tab bằng sender.tab.url (hoặc có thư của tab gửi window.location.hostname, có thể dễ dàng hơn), sau đó quyết định tập lệnh nội dung nào sẽ chèn vào tab qua chrome.tabs.executeScript().

    hoặc

  2. Chỉ có bạn background_page nghe chrome.tabs.onCreated.addListener()chrome.tabs.onUpdated.addListener() để có được URL của tab, sau đó quyết định những gì kịch bản nội dung để đưa vào tab qua chrome.tabs.executeScript(). Không cần chỉ định content_scripts trong tệp kê khai cho việc này.

    hoặc

  3. Tương tự như 1, nhưng có biểu hiện hình content_scripts kịch bản của bạn ra làm gì dựa trên URL hiện tại (một lần nữa có thể giải thích window.location.hostname), sau đó sử dụng chrome.extension.sendRequest() với một thông điệp cho background_page bạn nêu mà nội dung tập lệnh để thực thi (nghĩa là background_page của bạn không quyết định - tập lệnh nội dung gốc). Cùng một kết quả mặc dù.

+9

Thực ra, tôi không chính xác. Bạn * có thể * có các mẫu kết hợp khác nhau và các tập lệnh khác nhau thực thi. Chỉ cần thêm một đối tượng khác vào mảng 'content_scripts', với một tập' 'khác'' và' js', vv khi cần thiết. –

+0

Xin chào Chris, cảm ơn rất nhiều vì những gợi ý, rất hữu ích, đặc biệt là câu trả lời thứ hai (thêm một đối tượng khác vào content_script) .Worked perfect. – Venkatesh

+0

Chỉ có một câu hỏi đặc biệt khác về chrome ext .. Làm cách nào để truy cập và thao tác DOM của tab (an toàn https) đã được tiện ích mở rộng tạo (sử dụng chrome.tabs.create) và cách tôi có thể truy cập DOM của https trang trong iframe (nếu nó là posible, đó là) .. – Venkatesh

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