2013-07-08 47 views
16

Sau khi rối tung xung quanh với Tiện ích mở rộng của Chrome, tôi nhận thấy rằng khi bạn đang ở trên trang chrome://extensions, tập lệnh nền được bắt đầu trong tệp kê khai sẽ chạy như thể bạn đang duyệt internet hoặc trên một trang khác bên cạnh trang mở rộng tập lệnh nền sẽ không chạy.Tiện ích mở rộng của Google Chrome - tập lệnh nền

Dưới đây là những gì tôi có nghĩa là:

Trong tập tin Manifest của tôi:

"background": { 
    "scripts": ["jquery-latest.js","background.js"] 
    }, 

Bây giờ trong background.js file:

$(document).ready(function(){ 
    alert("working"); 
}); 

tôi sử dụng một chức năng cảnh báo đơn giản để xem nếu điều này sẽ hoạt động và phát hiện ra rằng alert("working"); chỉ được hiển thị khi tôi trực tiếp trên số chrome://extension ory. Nếu tôi truy cập google.com hoặc thứ gì đó thuộc loại đó, không có xì gà.

Câu hỏi của tôi nằm trong, tại sao điều này xảy ra? Làm thế nào để tôi thay đổi nó để nó cảnh báo không có vấn đề gì.

+2

Tôi không thể tạo lại hành vi được mô tả của bạn. Tôi thấy tập lệnh nền chạy chính xác một lần khi tôi cài đặt tiện ích hoặc khởi chạy lại trình duyệt từ trạng thái đã đóng. Nó không tạo ra sự khác biệt nào cho dù tôi đang xem trang 'chrome: // extensions' (mặc dù đó là cần thiết để cài đặt phần mở rộng, nhưng nó không phải là những gì nhắc nhở hành vi). – apsillers

+1

@apsillers Nếu bạn làm mới trang 'chrome: // extensions /' (Ctrl + R hoặc F5), tất cả các tiện ích sẽ được tải lại. Đó có lẽ là lý do tại sao OP quan sát hành vi mà anh ta đã mô tả. –

+3

@RobW Aha, vâng, tôi thấy rằng * làm mới * trang sẽ tái tạo hành vi. Ngoài ra, điều đó có vẻ giống như một phím tắt gỡ lỗi cực kỳ hữu ích; cảm ơn! – apsillers

Trả lời

25

background script nên được xem là "đang chạy trong nền của trình duyệt Chrome".
Hiệu ứng mong muốn của bạn (chạy tập lệnh cho mỗi trang) thực sự là một nhiệm vụ cho content scripts.

Để tìm hiểu thêm, hãy đọc https://developer.chrome.com/extensions/overview.html#arch.

+0

Vì vậy, thay vì tập lệnh nền, hãy chuyển sang tập lệnh nội dung? –

+0

@DavidBiga Chính xác. –

+0

vì vậy tôi vẫn gặp sự cố, tôi thử sử dụng: '" content_scripts ": [ { " js ": [" jquery-latest.js "," background.js "] } ],' - tôi cũng cần phải cung cấp các trận đấu và css? –

2

Đó là bởi vì bạn đang sử dụng trang nền .. sử dụng các trang sự kiện thay vì bằng hơi sửa đổi manifest.json .. Hãy thử thêm này:

"background": { 
    "scripts": ["jquery-latest.js","background.js"], 
    "persistent": false 
    }, 

để biết thêm thông tin chi tiết trên các trang sự kiện kiểm tra này: https://developer.chrome.com/extensions/event_pages

1

Hiệu ứng được tạo ra bởi vì bất cứ khi nào bạn tải chrome://extensions nó buộc các phần mở rộng phải tải lại, hành vi tương tự có thể được sao chép bằng CTRL + R. Vì vậy, mỗi lần, trang nền có tải lại mới, điều này không xảy ra trong trường hợp các trang khác.

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