Tôi có đoạn code sau trong kịch bản nền của tôi:Tiện ích mở rộng của Chrome: cách phát hiện tập lệnh nội dung đó đã được tải vào một tab?
chrome.tabs.onUpdated.addListener(function(tabId, changeinfo, tab) {
if (changeinfo.status !== 'complete')
return;
if (!matchesUrlFilters(tab.url))
return;
chrome.tabs.executeScript(tabId, { file: "jquery-1.7.1.min.js" }, function() {
chrome.tabs.executeScript(tabId, { file: "enhance.js" });
});
});
Tuy nhiên, điều này dường như tiêm kịch bản nội dung của tôi hai lần trong một số trường hợp (nó có thể xảy ra khi enhance.js
không window.history.pushState
).
Làm cách nào để có thể xác định xem tab đã có tập lệnh nội dung của tôi chưa? Tôi đã thử chrome.tabs.sendRequest
nhưng nó không bao giờ được gọi là gọi lại nếu tập lệnh nội dung chưa được thêm vào.
Khi tập lệnh được tiêm hai lần, hai tập lệnh 'enhanced.js' có chia sẻ một môi trường thực thi duy nhất với các biến được chia sẻ không? – abraham
Tôi không biết (và bây giờ có lẽ sẽ không bao giờ kiểm tra do câu trả lời giải quyết vấn đề hoàn toàn). –
Tôi biết đây là một câu hỏi cũ, nhưng tôi cũng gặp vấn đề này. Thay vì thêm một kiểm tra cho kịch bản đã tải, tôi chỉ phải xóa tập lệnh khỏi phần "content_scripts" của tệp manifest.json vì tôi ủy thác thực thi tập lệnh và không muốn nó được tải luôn. – Andrew