ส่วนขยายของ Chrome: ทำให้ทำงานได้ทุกครั้งที่โหลดหน้าเว็บ


93

ฉันต้องการสร้างส่วนขยายของ Chrome ที่เรียกใช้สคริปต์บางส่วนหลังจากโหลดหนึ่งหน้าฉันไม่แน่ใจว่าฉันต้องใช้ตรรกะนี้ในหน้าพื้นหลังหรืออาจเป็นที่อื่นได้ความช่วยเหลือใด ๆ ที่นี่จะได้รับการชื่นชมอย่างมาก


ในกรณีนี้ควรเรียกใช้สคริปต์หลังจากโหลดหน้าใด ๆ ในเบราว์เซอร์
albertosh

@ZloySmiertniy ใช่เพียงแค่มองหาสคริปต์เนื้อหาตรวจสอบให้แน่ใจว่าในตัวเลือก run_at คุณใส่ document_end และในการจับคู่: คุณต้องระบุว่าสคริปต์ของคุณจะถูกแทรกเข้าไปใน url ใด
albertosh

คำตอบ:


94

จากสคริปต์พื้นหลังคุณสามารถฟังchrome.tabs.onUpdatedเหตุการณ์และตรวจสอบคุณสมบัติchangeInfo.statusในการติดต่อกลับ มันอาจจะโหลดหรือสมบูรณ์ ถ้าเสร็จสมบูรณ์ให้ลงมือทำ

ตัวอย่าง:

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

    // do your things

  }
})

เนื่องจากสิ่งนี้อาจทำให้ทุกแท็บเสร็จสมบูรณ์คุณสามารถตรวจสอบได้ว่าแท็บนั้นactiveอยู่ในแอตทริบิวต์ที่เหมือนกันหรือไม่เช่นนี้:

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
กรีน

2
อะไร? คำตอบนี้คือตั้งแต่ 2 ปีครึ่งที่แล้ว ตอนนี้ทุกอย่างอาจเปลี่ยนไปแล้ว
fiatjaf

1
สำหรับการทำหน้า url เฉพาะ:if (tab.url.startsWith("https://example.com") == false) return;
Nabi KAZ

47

หากจะต้องมีการทำงานในonloadกรณีที่หน้าหมายความว่าเอกสารและทรัพย์สินทั้งหมดได้โหลดความต้องการนี้จะอยู่ในสคริปต์เนื้อหาonloadที่ฝังอยู่ในแต่ละหน้าที่คุณต้องการติดตาม


14
จะเป็นการดีกว่าหากปล่อยให้มีการแทรกสคริปต์เนื้อหาที่ "document_end" ดู "run_at" ในรายการ content_script:run_at: "document_end"
Mohamed Mansour


14

รหัสนี้ควรทำ:

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!')

เป็นไปได้ไหมที่จะใช้ regexp ในช่อง "การจับคู่"
Bootuz

ใช่ดูhttps://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.