ตึก chrome ส่วนขยายงเพื่อที่จะเปิดแท็บไว้โดย DOM ธาตุ

0

คำถาม

ฉันกำลังสร้างเป็น chrome เลื่อนเวลาออกไปหน่อย เป้าหมายคือแบบแท็บที่เปิดอยู่ทั้งหมจากยอดวิวในยูทูปโดยวิดีโอช่วงเวลา(ต่ำที่สูง).

ฉันเจอรหัสจากนี้ GitHub โครงการ,อธิบายอยู่ใน นี้หัดเล่น:

popup.js

function byAlphabeticalURLOrder(tab1, tab2) {
  if (tab1.url < tab2.url) {
    return -1;
  } else if (tab1.url > tab2.url) {
    return 1;
  }
  return 0;
}

chrome.tabs.query({windowId: chrome.windows.WINDOW_ID_CURRENT}, (tabs) => {
  tabs.sort(byAlphabeticalURLOrder);
  for (let i = 0; i < tabs.length; i++) {
    chrome.tabs.move(tabs[i].id, {index: i});
  }
});

นี่รหัสได้ผลดีกับการเรียงลำดับโดยกษรตามลำดับ อย่างไรก็ตามฉันต้องการจะปรับตัวมันต้องเรียงลำดับตาม@title:menu วิดีโอเวลา

ดังนั้นฉันเขียนแฟ้มนี้เพื่อเอาวิดีโอช่วงเวลาจากบแท็บที่เปิดอยู่ทั้งหมแต่ยังไม่สามารถไปรอบๆเพื่อที่"การเรียงลำดับหรือย้ายแท็บ"ส่วนหนึ่ง.

popup.js

chrome.tabs.query({
  windowId: chrome.windows.WINDOW_ID_CURRENT
}, (tabs) => {
  chrome.tabs.query({}, function (tabs) {
    for (var i = 0; i < tabs.length; i++) {
      chrome.tabs.executeScript(tabs[i].id, {
        code: '(' + function () {
          return {
            seconds: document.querySelector("video").duration
          };
        } + ')()'
      }, function (result) {
        document.write(result[0].seconds + '<br>');
      });
    }
  });
});

ส่งออก(วิดีโออยู่ในช่วงเวลาวินาที)-(ดูเหมือนอยู่ popup.html):

1229.041
187.501
510.581
609.941
1473.821
955.481
5464.281
59.201
1787.701
1523.941
1

คำตอบที่ดีที่สุด

1

มันไม่ชัดเจนว่าอะไรที่คุณพยายามแล้วแต่คุณสามารถเพิ่มพวกนั้นค่าเพื่อวัตถุอยู่ในอาเรย์ในของคุณที่มีอยู่วงและจากนั้นค่อนนั้นอาเรย์อยู่ในสวมวง เพราะ executeScript คือ asynchronous คุณต้องรอก่อเรื่องให้เสร็จ,ซึ่งหมายความว่าการแก้ไขรายการขอสัญญาแล้วการเรียงลำดับในรายชื่ออยู่ videolength แล้วเคลื่อนที่น้อย

นี่คือสิ่งที่ฉันขึ้นมาบอกสำหรับ MV3. มันอาจจะเครื่องมือทำความสะอาดวิธีที่จะทำอย่างนี้(ฉันค่อนข้างใหม่กับเรื่องนี้):

*แก้ไข:เล็กน้อแก้ไขเพื่อทำความสะอาดรหัสององค์กร ติดฟังก์ชันต้องการกระทำ(มือนกัน e., วิ่งในการคลิก Chrome ส่วนขยายภาพไอคอนปุ่ม).

popup.js


chrome.action.onClicked.addListener(sortTabsbyDuration);

async function sortTabsbyDuration() {
  async function createListEntry(tabId, i) {
    return new Promise((resolve) => {
      if (/\.youtube\.com\/watch\?/.test(tabs[i].url)) {
        chrome.scripting.executeScript(
          { target: { tabId: tabId }, func: getYouTubeLength, args: [tabId] },
          (returnValue) => {
            resolve(returnValue[0].result);
          }
        );
      } else {
        resolve({
          tabId: tabId,
          vidLength: 9999999999,
        });
      }
    });
  }
  function getYouTubeLength(aTab) {
    let vidLength = document.querySelector("video").duration;
    if (!vidLength) {
      vidLength=1;
    }
    return {
      tabId: aTab,
      vidLength: vidLength,
    };
  }
  // MAIN:
  const tabs = await chrome.tabs.query({ currentWindow: true });
  let promiseList = [];
  for (var index = 0; index < tabs.length; index++) {
    promiseList.push(createListEntry(tabs[index].id, index));
  }
  const promisesFinished = Promise.all(promiseList);
  const sortedList = (await promisesFinished).sort((a, b) => {
    return a.vidLength - b.vidLength;
  });
  console.log(sortedList);
  for (let index = 0; index < sortedList.length; index++) {
    await chrome.tabs.move(sortedList[index].tabId, { index: index });
  }
}

รายการlanguage

{
    "manifest_version": 3,
    "name": "Sort Your Tubes",
    "version": "0.0.0.2",
    "action": {
        "default_title": "Click to sort YouTube videos by video length."
    },
    "background": {
        "service_worker": "popup.js"
    },
    "permissions": [
        "tabs",
        "scripting"        
    ],
    "host_permissions": [
        "*://www.youtube.com/*"        
    ]
}
2021-11-24 02:59:05

ว้าว,นั่นช่วยได้มากขอบคุณสำหรับของคุณเยี่ยมคำตอบ!
iamzeid

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่