Tiện ích mở rộng của Chrome: Giúp nó chạy mỗi lần tải trang


91

Tôi muốn tạo tiện ích mở rộng chrome thực thi một số tập lệnh sau khi một trang được tải, tôi không chắc liệu mình có phải triển khai logic này trên trang nền hay có thể ở bất kỳ nơi nào khác, bất kỳ trợ giúp nào ở đây sẽ được đánh giá cao.


chỉ trong trường hợp, nó sẽ chạy tập lệnh sau khi bất kỳ trang nào được tải trong trình duyệt.
albertosh

@ZloySmiertniy vâng, chỉ cần tìm các tập lệnh nội dung, cũng đảm bảo rằng trong tùy chọn run_at, bạn đặt document_end và cả các kết quả phù hợp: bạn cần chỉ định url nào mà các tập lệnh của bạn sẽ được đưa vào.
albertosh

Câu trả lời:


92

Từ một tập lệnh nền, bạn có thể nghe chrome.tabs.onUpdatedsự kiện và kiểm tra thuộc tính changeInfo.statustrên lệnh gọi lại. Nó có thể đang tải hoặc hoàn thành . Nếu nó hoàn tất , hãy thực hiện hành động.

Thí dụ:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete') {

    // do your things

  }
})

Bởi vì điều này có thể sẽ kích hoạt mỗi khi hoàn thành tab, bạn cũng có thể kiểm tra xem tab có thuộc tính đồng âmactive của nó hay không , như sau:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete' && tab.active) {

    // do your things

  }
})

8
Uncaught TypeError: Cannot read property 'onUpdated' of undefined
Màu xanh lá cây

2
Gì? Câu trả lời này là của 2 năm rưỡi trước. Mọi thứ có lẽ đã thay đổi bây giờ.
fiatjaf

1
Để thực hiện trang url cụ thể:if (tab.url.startsWith("https://example.com") == false) return;
Nabi KAZ

47

Nếu nó cần chạy trên onloadsự kiện của trang, nghĩa là tài liệu và tất cả nội dung của nó đã được tải, điều này cần phải nằm trong một tập lệnh nội dung được nhúng trong mỗi trang mà bạn muốn theo dõi onload.


14
Sẽ tốt hơn để cho các kịch bản nội dung được tiêm tại "document_end" nhìn thấy "run_at" trong content_script manifest:run_at: "document_end"
Mohamed Mansour


10

Mã này nên làm điều đó:

manifest.json

   {
      "name": "Alert 'hello world!' on page opening",
      "version": "1.0",
      "manifest_version": 2,
      "content_scripts": [
        {
          "matches": [
            "<all_urls>"
          ],
          "js": ["content.js"]
        }
      ]
    }

content.js

alert('Hello world!')

có thể sử dụng regexp trong trường "trận đấu" không?
Bootuz

Vâng, hãy xemhttps://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.