Страницы: 1
Странно, но сейчас срабатывает без каких либо event.preventDefault(); и event.stopPropagation();
Но первый клик всегда уходит "в молоко". Со второго клика уже начинает действовать функция.
Видимо это происходит потому, что код добавляющий обработчик события вешается уже после нажатия на кнопку на тулбаре.
Можете подсказать, как можно повесить его раньше, чтобы уже первый клик по кнопке срабатывал?
Пробовал в overlay писать код инициализации в теге <script> - не помогло.
bunda1 спасибо за помощь, но не помогло.
В ходе экспериментов по подстановке в разные места функций выяснилось, что:
Первый код вообще все блокирует, т.е. кнопка такое ощущение что даже не нажимается.
Второй код просто не работает.
Немного поспешил...
При отлове ПКМ всплывает стандартное меню (хотя и не всегда, иногда почему-то оно не выводилось), как правильно его отключить?
function MakeChoice (event) { //Функция вызывается из оверлея по команде oncommand="MakeChoice()" event.preventDefault(); event.stopPropagation(); // event.type == "mouseup" && closeMenus(event.target); // пробовал и так if (event.button === 0) {Alert("ЛКМ");} //Left else if (event.button === 2) {Alert("ПКМ");} //Right } var testbt = document.getElementById("Test_button") testbt.addEventListener("mousedown", MakeChoice); },
Спасибо, получилось.
Основная проблема оказалась в том, что я пытался внедрить этот код в overlay, а не сам исполняемый js sript.
Добрый день.
В overlay.xul создаю кнопку на панеле.
<toolbarpalette id="BrowserToolbarPalette"> <toolbarbutton id="Test_button" label="Test_B" tooltiptext="Test_click" oncommand="MakeTest()" class="toolbarbutton-1 chromeclass-toolbar-additional"> </toolbarbutton> </toolbarpalette>
И все отлично работает. Но вот задумал я сделать вызов разных функций в зависимости от ЛКМ или ПКМ.
И вроде бы нашел код похожий на форуме. Вроде 1-Left \ 2 - Middle \ 3 - Right click.
var testbt = document.getElementById("Test_button") testbt.addEventListener("mousedown",function(e) {console.log(e); // you can inspect the click event if (e.which === 3) {alert("right click");} });
Но как не прикручиваю его в файл overlay - не получается... Кнопка вообще не выводится на панель.
Можете подсказать как правильно сделать?
Код работает. Но не до конца его понимаю. Можете его объяснить для повышения уровня образованности?
К примеру я так понял, что .open это метод для открывания окна, аналог которого .show() и который сейчас не рекомендуется использовать?
А как прочитать вот эти условия? (result => result == picker.returnOK && picker.file.remove(true))
Перевел этот код в аналогичный, но более понятный для меня:
var nsIFilePicker = Components.interfaces.nsIFilePicker; var foldp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); foldp.init(window, "", nsIFilePicker.modeGetFolder); var rav = foldp.show(); if (rav == nsIFilePicker.returnOK) { foldp.file.remove(true);}
В нем я могу записать в переменную выбранный путь .file.path, а как это сделать в вашем коде?
И самое главное! Можно ли как-то удалить папку просто подставив путь, т.е. без ее выбора в окне пользователем?
Файл так можно удалить. При удалении файла я использую .initWithPath(delpat
Добрый день.
1) Можно удалить файл, используя код:
function delete_file_by_path(delpath) {var file = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(delpath); if (file.exists()) file.remove(false);} delete_file_by_path (delpath); //Активируем
Вопрос - можно ли удалить папку?
По крайней мере этим же кодом сделать этого не получилось. Подозреваю что все дело в .nsILocalFile, но чего-то похожего на .nsILocalFolder не нашел.
2) Так же к примеру мне нужно открыть стандартное окно для выбора файла, чтобы получить путь к файлу. Это делаю кодом:
[code]
var chosenpath; // В этой переменной будет путь к файлу
function getpatch(dialogtitle)
{var nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"]
.createInstance(nsIFilePicker);
fp.init(window, dialogtitle, nsIFilePicker.modeOpen);
var rv = fp.show();
if (rv == nsIFilePicker.returnOK) {cho
Спасибо, получилось.
Судя по ссылке придется переписывать код расширения потом.
Но по моему возможность обращаться из активного окна к другой вкладке сохраниться, разве нет?
Добрый день.
Мне нужно сохранить вкладку. Для этого приходится использовать код:
var TabIndex = gBrowser.tabContainer.selectedIndex; //Запоминаю индекс текущей вкладки gBrowser.selectedTab = ТутВкладка; // Делаю нужную вкладку активной saveDocument(window.content.document, true); // Сохраняю документ gBrowser.removeCurrentTab(); // Закрываю активную вкладку gBrowser.selectTabAtIndex(TabIndex ); //Активирую ранее запомненную вкладку, иначе браузер открывает вкладку слева от закрытой
Кажется очень много действий, плюс возникают мелькания из-за переходов.
Возможно как-то в строке где сохраняется документ обратиться ко вкладке без перехода на нее?
Т.е. есть какой-то код, который заменит window.content.document и будет воспринят функцией saveDocumet?
Добрый день.
Мне необходимо:
Открыть шаблон HTML страницы с локального компьютера (потому что это имхо просто легче чем генерировать страницу с нуля) и вставить в него данные.
Далее вывести диалог на сохранение страницы.
Вот так заполняем содержимое шаблона.
var TabOpen = gBrowser.addTab('Путь к файлу на локальном компьютере'); var Tab = gBrowser.getBrowserForTab(TabOpen); Tab.addEventListener("load", function () { var recipientHTML = Tab.contentDocument.body.innerHTML // Тут работаем с recipientHTML как со String и меняем все что нужно. Tab.contentDocument.body.innerHTML = recipientHTML; //Тут записываем новое содержимое страницы. }, true);
Вцелом все работает, текстовые переменные заменяются и сразу же отображаются в новых значениях.
Но есть проблема, на странице есть интерактивная карта и даже тогда когда я просто перезаписываю innerHTML (как есть) без изменений, карта визуально "замерзает" и с ней невозможно взаимодействовать.
У карты следующий код:
[code]<link hr
Страницы: 1