के निर्माण के लिए क्रोम एक्सटेंशन तरह खुले टैब द्वारा डोम तत्व

0

सवाल

मैं निर्माण कर रहा हूँ एक क्रोम एक्सटेंशन है. लक्ष्य है सॉर्ट करने के लिए सभी खुले टैब से यूट्यूब से वीडियो की अवधि (उच्च करने के लिए कम).

मैंने पाया इस कोड 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});
  }
});

इस कोड काम करता है के साथ पूरी तरह से छँटाई के द्वारा वर्णमाला के क्रम. हालांकि, मैं चाहता हूँ करने के लिए इसे समायोजित करने के लिए क्रमबद्ध करें वीडियो की अवधि ।

तो मैं यह लिखा फाइल प्राप्त करने के लिए वीडियो की अवधि से सभी खुले टैब, लेकिन अभी भी नहीं कर सकते हैं चारों ओर पाने के लिए "छँटाई या चलती टैब" हिस्सा है ।

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 अतुल्यकालिक है, आप प्रतीक्षा करने की जरूरत है पहली पाश के लिए खत्म करने के लिए इसका मतलब है, जो के समाधान की एक सूची का वादा किया है, तो छँटाई सूची पर videolength, फिर चलती टैब.

यहाँ है क्या मैं के साथ आया था के लिए MV3. वहाँ शायद रहे हैं क्लीनर तरीके से ऐसा करने के लिए, (मैं कर रहा हूँ काफी इस पर नया):

*संपादन: मामूली संपादन के लिए साफ कोड संगठन है । संलग्न समारोह के लिए कार्रवाई (I. ई., रन पर क्लिक क्रोम एक्सटेंशन आइकन बटन).

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 });
  }
}

manifest.json

{
    "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ý
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में