Адресная строка как в Яндекс Браузере
-
Подумал, что кому-то может быть интересна фича, которую я реализовал в своей темке Ribbon Theme. Это адресная строка, в которой отображается заголовок текущей страницы и домен, по клику на который происходит переход на главную страницу сайта.
Скриншоты
Color Behind Tabs: ON
Color Behind Tabs: OFF
Accent From Page: OFF
Установка
Нужно действовать, как описано в посте о моддинге:
- Поместить yb_address_bar.js в
<YOURVIVALDIDIRECTORY>\Application\<VERSION>\resources\vivaldi
. - Добавить строчку
<script src="yb_address_bar.js"></script>
в<body>
файлаwindow.html
. - Перезапустить Vivaldi.
UPD 2024-03-24:
- Пофиксил вычисление домена для расширений.
- Поместить yb_address_bar.js в
-
Почему-то только после 2 перезапуска заработало Ну да неважно.
Я начинаю подозревать, что мне стала очень нужна возможность подключать .js так же, как .css. -
@sedative29rus Вряд ли есть какие-то технические ограничения, скорее связано с безопасностью, раз даже плитки Экспресс-панели нельзя по url подставить. Не думаю, что когда-нибудь сделают подобное.
-
Не думаю, что когда-нибудь сделают подобное.
Зделол сам (ладно-ладно, ИИ чуточку помог) на пихоне.
import os import shutil import subprocess from bs4 import BeautifulSoup # Начальный путь для поиска файла window.html initial_path = os.path.join(os.getcwd(), "Application") def find_window_html(path): for root, dirs, files in os.walk(path): if "window.html" in files: return os.path.join(root, "window.html") def copy_js_files(js_files, dest_dir): for js_file in js_files: shutil.copy(js_file, dest_dir) window_html_path = find_window_html(initial_path) if window_html_path: with open(window_html_path, "r") as file: html = file.read() soup = BeautifulSoup(html, "html.parser") body_tag = soup.find("body") script_tags = body_tag.find_all("script") if body_tag else [] existing_js_files = set(script["src"] for script in script_tags) js_files = [f for f in os.listdir() if f.endswith(".js")] # Удаляем лишние js-файлы и соответствующие записи тегов script for script_tag in script_tags: if script_tag["src"] not in js_files: script_tag.decompose() for js_file in js_files: if js_file not in existing_js_files: new_script_tag = soup.new_tag("script", src=js_file) body_tag.append(new_script_tag) body_tag.append("\n") with open(window_html_path, "w") as file: file.write(str(soup)) copy_js_files(js_files, os.path.dirname(window_html_path)) vivaldi_path = os.path.join(initial_path, "vivaldi.exe") subprocess.Popen(vivaldi_path)
Работает следующим образом. Кладём питон-скрипт и js-моды сюда
Запускаем скриптом. При каждом запуске он делает так, чтобы включались только лежащие здесь моды. Т.е. если добавить ещё один, он автоматом пропишется и подключится. Если удалить - соотв. запись тега <script> в window.html тоже удалится.
Ну и понятно, что нужен питон и bs4 к нему. -
@sedative29rus Три мода, и все мои :3
-
@aminought ну у меня в загашнике есть ещё парочка, но раз уж оффтоплю здесь, то надо соответствовать
-
@sedative29rus Всё равно приятно)
-
-
@sedative29rus Можешь в следующий раз заглянуть в консоль, может какие-то ошибки есть? У меня не получилось воспроизвести. Можешь еще попробовать увеличить таймаут в предпоследней строчке.
-
-
заглянуть в консоль, может какие-то ошибки есть?
Uncaught TypeError: Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'. at #createUrlFieldMutationObserver (yb_address_bar.js:64:38) at new YBAddressBar (yb_address_bar.js:54:81) at initMod (yb_address_bar.js:248:31)
-
@sedative29rus Да, выглядит так, будто UI браузера не успевает подгрузиться до запуска скрипта. Увеличение таймаута точно поможет, чуть позже добавлю повторение попытки запуска.
-
UPD 2024-03-24:
- Пофиксил вычисление домена для расширений.