hartumov
В контентских процессах событие "contextmenu" пасёт ContextMenuChild
resource:///actors/ContextMenuChild.jsmПри наступлении события он собирает информацию о кликнутом,
и отправляет её в родительский процесс, в ContextMenuParent
resource:///actors/ContextMenuParent.jsmТот вызывает window.openContextMenu(),
где информация сохраняется в nsContextMenu.contentData,
и открывается контекстное меню.Меню имеет атрибут "onpopupshowing", где, при наступлении события,
из сохранённой информации формируется объект gContextMenu
chrome://browser/content/nsContextMenu.jsТы хочешь всё это миновать и сразу кликнуть по пункту.
А какое именно изображение имеется в виду программно-кликающим,
видимо, должно определиться как-то телепатически.
Да любое изображение на любой веб странице, если в его контекстном меню есть пункт "Открыть изображение в новой вкладке". Хотя бы на этой странице иконка браузера там где указан UA пользователя.
И дело не только в
Как программно кликнуть на пункте контекстного меню?
В меню картинки есть пункт "Открыть изображение в новой вкладке". Его id = "context-viewimage".
Если я открываю меню ПКМ, то программно кликается нормально.
Но если открыть контекстное меню через
То вместо клика в консоли ошибка gContextMenu is null
Что надо поправить?
Начиная с версии ФФ где то 100 наблюдается следующий косяк.
При открывании сайта, если есть проверка безопасности подключения, браузер моментально вылетает.
Это не касается случаев, когда при логине дается картинка и нужно отметить мотоциклы или лестницы. Там все нормально. А вот именно при подключении к сайту (скрин сделан в другом браузере, в Фаерфоксе до этой страницы даже не доходит, он сразу вылетает) где надо поставить галку я не робот.
Иногда браузер вылетает почти сразу после клика по ссылке. Иногда открывается вкладка, но загрузиться в нее ничего не успевает, браузер падает.
Это происходит и в безопасном режиме, и с новым профилем.
Кто сталкивался с этим?
hartumov пишетМожно с помощью css сдвинуть контекстное меню страницы на несколько пикселей вправо и вниз?
скрытый текст
sandro79
благодарю! :rock::rock:
Можно с помощью css сдвинуть контекстное меню страницы на несколько пикселей вправо и вниз?
Т. е. чтобы меню появлялось чуть правее и чуть ниже чем по дефолту.
В прошлых версиях [firefox] при клике в адресной строке оттуда выпадал список часто посещаемых сайтов.
Формировал этот список сам браузер по своему усмотрению и меня это устраивало.
Сейчас кликаю на адресную строку, оттуда выпадает список предустановленных ярлыков - Ютуб, Реддит, Амазон и пр.
Если в настройках снять галку При использовании адресной строки предлагать ссылки из ярлыков, то при клике в адресной строке ничего не выпадает.
Можно как то вернуть прежнее поведение браузера?
Вероятно, Streams_API просто не подходит для таких дел,
типа хорошее быстрое соединение, и вот и вываливает сразу всё что есть.
А задумано для чего-то медленного, и большого как видос, не знаю.
Тут надо сетевых людей спрашивать, тех, которые в этом понимают.
Ну бог с ним, значит не суждено. Спасибо за помощь.
hartumov пишет
просьба дать готовый код
Это при том, что с тебя вообще ни одной строчки кода.
А какой с меня может быть код? Обычный Fetch и дальше с помощью match получаю нужный кусок кода.
fetch(url) .then( async (response) => { let html = await response.text().match(/foo/)[0]; })
Ну, вот мне about:license нарезает 73 × 4096 байт, но не всегда, почему-то.
У меня этот код совсем не нарезает. Вот я запрашиваю главную страницу этого форума и хочу получить html по зарывающий тег title включительно. Делаю
[spoiler][code]
(async () => {
var response = await fetch("https://forum.mozilla-russia.org/index.php");
var reader = response.body.getReader();
var result, decoder = new TextDecoder();
while(!(result = await reader.read()).done) {
var bytes = result.value;
var html = decoder.decode(bytes);
if (html.includes("</title>")) {
reader.cancel();
Я с помощью Fetch получаю HTML страницы с некоего сайта. Но мне не надо всю страницу, а только небольшой фрагмент в начале кода. Я хочу не загружать весь HTML и потом вырезать нужный мне кусок, а что бы получение ответа на нужном месте прерывалось и я получал бы то что уже загружено.
Можно это как то реализовать? Сейчас появились Streams_API может с их помощью? Если да, то просьба дать готовый код, потому что сам я это дело не осилю.
Dumby
Спасибо за код для экпорта закладок!
Можно сделать код для экспорта закладок в формате HTML в назначенную папку без запроса?
Отдельно нужные шрифты разрешить нельзя, но можешь разрешить подгрузку шрифтов в нужных доменах
Нет, ну это не годится. Тогда надо на всех доменах разрешать. Потому что эти иконочные шрифты повсеместно используются.
Может кто в курсе.
Я запретил в uBlock Origin загрузку удаленных шрифтов. Чтоб быстрее грузились страницы.
И оно бы ничего, браузер находит замену из системных шрифтов. Но есть два шрифта - Material Icons и еще какой то иконочный, для которых замена не находится и я вижу вместо символов прямоугольные шпалы.
Мой вопрос: можно разрешить отдельно эти два шрифта? Шрифты в uBlock Origin блокируются как то по особому и исключение с @@ не работает.
hartumov пишетВ консоли две ошибки
Ого! Не думал что такое (пока) встречается "в дикой природе".
Значит CB установлен на релиз или бету вылеченную не через config.js,
либо на билд изначально не нуждающийся в лечении (DE, Unbraindead, ...)
и без config.js как такового.
Да, я ставил CB через правку omni.ja
Если MDN-страница eval недостаточно запугала, то можно переключить
настройку security.allow_eval_with_system_principal
Переключил. eval заработал. Ну посмотрим как оно что будет. Спасибо за помощь! :)
hartumov пишетесть у меня нужный фрагмент my_scr в виде строки. А как сделать, чтоб этот код начал выполняться
eval? Не, никогда не слышал.
Пробовал. У меня этот eval блокируется. В консоли две ошибки:
eval() и eval-подобное использование других методов не разрешено в Родительском процессе или в Системных контекстах (Использование заблокировано в «chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button3@init»)
и
И если это важно, добавлю, что у меня отключен мультипроцессорный режим.
…Подскажите пожалуйста. Вот есть где то в интернетах файл abcd.js. Он большой, а мне нужен оттуда маленький кусочек. Я делаю:
fetch (http://abcd.js ) .then(resp => resp.text()) .then(scr => { let my_scr = scr.match(regexp)[0] // получаю нужный фрагмент из файла abcd.js, полностью он мне не нужен } )
Теперь есть у меня нужный фрагмент my_scr в виде строки. А как сделать, чтоб этот код начал выполняться в кнопке?
Dumby
Всё получилось. Большое спасибо за помощь и разъяснения!
hartumov пишетвместо keyword я вставляю краткое имя закладки или просто веб адрес. Не происходит ничего, только в консоли пишет Promise { <state>: "pending" }
Интересно, откуда может взяться запись в консоли?
Разве что запускать, собственно, с консоли.И что значит «или просто веб адрес»? Написано было чётко:
И вторая, можно было открыть закладку по ее ключевому слову.
При чём тут «веб адрес»? Если приведённому тобой коду, на Firefox 56,
скормить вместо keyword «просто веб адрес», то он тоже ничего не откроет.
А по краткому имени — должен открывать. Может в keyword'е опечатка.
С веб адресом это я просто оговорился.
У меня не получалось запустить этот код из кнопки, потому я попробовал с консоли.
А не получалось потому, что я вставлял краткое имя букмарклета. Букмарклет не вызывается, хотя старый код
прекрасно с этим справлялся.
А если закладка с обычным адре
…hartumov пишетЕсть сейчас замена этим двум фичам?
Первая, как-то так, наверно.
Плюс, приглядывать за багами, типа такого.
[spoiler][code]OpenBrowserWindow().addEventListener("XULFrameLoaderCreated", {
async handleEvent(e) {
if (!e.target.matches("[id^=panel-].browserSidebarContainer :scope"))
return;
await Promise.resolve();
var func = type => {
var restrict = () => {
destroy();
docShell.allowImages = docShell.allowJavascript
= docShell.allowPlugins = false;
}
var destroy = () => {
removeEventListener(type, restrict);
removeEventListener("unload", destroy);
}
addEventListener(type, restrict);
addEventListener("unload", destroy);
}
var url = "data:charset=utf-8," + encodeURIComponent(
`(${func})("DOMDocElementInserted");`
);
var {type} = e, stack = e.target.parentNode;var unload = () => {
…
stack.removeEventListener(type, this);
tab.r
Раньше в СВ были две удобные фичи. Первая: можно было открыть окно и запретить в нем загрузку нежелательного контента.
let win = open('','',param); docShell = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIWebNavigation).QueryInterface(Ci.nsIDocShell); docShell.allowImages = false; docShell.allowJavascript = false; docShell.allowPlugins = false;
И вторая, можно было открыть закладку по ее ключевому слову.
Есть сейчас замена этим двум фичам?
…hartumov то что ты описал, делают почти все баннерные\рекламные сетки. Они ставят обработчики на странице, открывают что ИМ нужно, кудаб ты\я (юзер) не жмакнул. открывают окна\вкладки, подменяют их порядок\расположение... всё это т.н. "вредоносные действия", а по-простому - мудачилово.
Сходи на любой проно-сайт, отключи рекламорезку и посмотри как это они делают. Твои побуждения и мотивы могут быть самыми светлыми, но это никак не меняет инструментов которые тебе понадобятся. убивают не пули\пистолеты, а люди.
Я собирался открывать окно c подкорректированным кодом не на сайте (которого у меня нет), а у СЕБЯ в браузере.
Гугл уже подсказал мне, что это можно сделать двумя способами:
window.document.write() или window.document.body.innerHTML
Вот и вся премудрость.
hartumov пишетИз HTML кода я вырезаю все что мне не нужно.
А как теперь открыть окно с этим моим HTML кодом?
Мне нужно вставить свои и body, и head со всеми скриптами и стилями.Эдакий ты наглец-баловник, хм. Яб тебе сноги засадил; так, нецелясь; куда_прилетит.... не особо_выбирая место_приложения_силы.
Есть ещё соратники в вышеобозначенном деянии? Мамкин вырезатель, окнооткрыватель.... :|
Да понятно что ты Рэмбо сноги засадитель и все вокруг дрожат от ужаса.
Но только я не понял в чем криминал моего деяния. Ну забита страница не нужным мне хламом. Я оставил на ней то, что мне нужно и хочу открыть ее в таком виде.
И что? Кому от этого плохо, какие законы я нарушил или кому я доставил этим неприятности?
Я правда не в курсе.
Подскажите пожалуйста.
Я делаю xmlhttprequest на определенную страницу, получаю ее исходный код. Из HTML кода я вырезаю все что мне не нужно.
А как теперь открыть окно с этим моим HTML кодом?
Мне нужно вставить свои и body, и head со всеми скриптами и стилями.
На некоторых веб страницах если открыть панель разработчика на вкладке "Сеть", можно увидеть следующее. Файлы css, ссылки на которые прописаны в Head страницы, загружены по два, а бывает и по три раза. Иногда бывает что и js скрипты загружаются дважды. Причем не подряд, первый раз стиль может загрузиться в начале, а второй раз уже в самом конце загрузки страницы.
Ещё на некоторых страницах при загрузке бывает, что начинает отрисовываться содержимое, потом на долю секунды всё пропадает и уже во второй раз страница грузится нормально.
С чем это все связано?
Спасибо парни за ссылки! Установил я себе этот PlayFlash, вроде работает.
А у меня стоит ФФ 32-битная версия ((((
hartumov,Я в юзерагенте вижу Win64 - вот и дал на неё ссылку :)
Честно сказать, я запутался. Я думал, Win64 в юзерагенте - это разрядность ОС, а браузер может быть и 32 бита. Зависит от того, какой пожелал себе установить. Тем более, у меня портабельная версия и я сейчас уже не могу сказать, какую версию себе скачивал.
А как узнать разрядность именно браузера, где это прописано или где это можно проверить?