Это не будет работать, циклы пробегают раньше, чем срабатывает код обмена элементов, отбитый таймаутов. Сперва выньте весь массив значений в переменную, потом ее сортируйте, запуская при этом анимации обмена со всё увеличивающимся шагом.
Заходите в about:config и меняете значение browser.urlbar.trimURLs, это ведь нормальный браузер и в нем всё можно настроить.
А, у вас хром? Тогда извините.
TechNOIR: Вам придется показать конкретный пример страницы, где это происходит, выложите куда-нибудь. Возможно, умный блокировщик рекламы бросает вас назад; возможно, рекламный сайт открывает вашу страницу во фрейме, и там срабатывает ваш скрипт. Надо увидеть глазами в общем.
Может, на той странице, куда происходит переход, есть тое ссылка, подходящая под [href*=".xyz"] и ведущая на главную, не? И там этот же скрипт подключен?
Roman Kitaev: Ваш тезис может быть правдой, а может быть нет. Он точно не является аксиомой или чем-то очевидным, а думать над ним я необходимости не вижу. Тем не менее, я весьма сильно уверен в том, что мне никого сразу ни от чего отучать не нужно. А если бы было нужно, я бы пошел на сайт, где делают код ревью. Тут же я отвечаю на вопрос о том, почему "не работает" map, поскольку этот вопрос был задан.
Username: Почитайте про то, как работает xhr в джаваскрипте. Если вкратце, то вот это место xhttp.onreadystatechange = function () {...} назначает действие, которое выполнится после того, как xhr завершится. Сама функция, содержащая этот код, не прекратит свое выполнение, т. е. в вашем случае она завершится и код вернется в то место, где она была вызвана. А на xhr ответ придет когда-то там, всё это время js само собой не остановлен (иначе бы интерфейс браузера зависал).
danis_2014: Обратите внимание на ответ димончика, он правильно написал как вы можете в скрипте получить путь до его папки, а потом с помощью os.path.join(dir_path, "png") получать файлы рядом с ним вне зависимости от того, откуда скрипт запустили.