Я делаю все это с помощью блокнота Firefox. Скрипт работает нормально, когда я запускаю его, глядя на первое изображение, в противном случае он говорит «Exception: TypeError: curr is undefined» в строке 82 (цикл while, который проходит через дочерние узлы), и я пытаюсь выяснить, почему мой функция, которая должна «сбрасывать», она не работает. Я также заметил, что если я использую baseState и openTabs из консоли, это работает, но не с нуля.
Я попытался запустить его в консоли, и это работает, но цель в том, чтобы иметь возможность использовать его как расширение, а не запускать его из консоли, чтобы он не работал. Я посмотрел его, и там был похожий пост, но был сценарий, который не позволял бы вам открывать новые вкладки с определенных сайтов, поэтому они сказали установить среду для браузера, но это не сработало для меня, что имеет смысл, так как это не так. т применяется. Кроме того, я написал функцию «reset» (baseState), которая возвращает вас к первому изображению, но опять же не работает, если только вы не делаете это в консоли.
//next button class is _6CZji
//back button class is POSa_
//img class is FFVAD
//video class is tWeCl
//commented out some parts I don't think are relevant to shorten it up
function baseState()
{
//sees if there's a back button or only one picture, clicks back until at start and returns true if there's only one picture
}
function openTabs()
{
let onePic = baseState(); //the reset
if(onePic)
{
//if only one pic/video put that up
}
else
{
//get the list of all elements
let ul = document.getElementsByClassName("YlNGR")[0];
//get everything in the list (incomplete for now)
let items = Array.from(ul.childNodes);
//go through every item in the list (as it grows it'll take account of that and go farther)
for(let i = 0; i < items.length; i++)
{
//get all items right now
let newItems = Array.from(ul.childNodes);
//if any of the new items aren't in the old array add them
newItems.forEach(item => {
if(!items.includes(item))
items.push(item);
});
//if it's not the last element, go to next
if(i < items.length - 1)
{
const button = document.getElementsByClassName("_6CZji")[0];
button.click();
}
}
items.forEach((item) => {
i++;
//temporary variable
let curr = item;
//until you reach the image/video, go to the next child node
/*
LINE BELOW THIS HAS THE ERROR
*/
while(curr.nodeName != "IMG" && curr.nodeName != "VIDEO")
{
let arr = Array.from(curr.childNodes);
curr = curr.childNodes[0];
}
//once you reach the image, open it
window.open(curr.src, "_blank")
});
}
}
openTabs();
Предполагается открыть вкладку для каждого изображения / видео в сообщении, независимо от того, какое изображение я смотрю при запуске. Ошибка, которую он дает в блокноте:
/*
Exception: TypeError: curr is undefined
openTabs/<@Scratchpad/7:82:19
openTabs@Scratchpad/7:75:15
@Scratchpad/7:95:1
*/
Если вы хотите проверить это, вам нужно убедиться, что у вас есть только открытая запись, поэтому выберите публикацию в Instagram и обновите страницу, тогда она будет открыта только (не канал / профиль)