Страницы: 1
Остро интересует проблема открытия ссылок и страниц с русскоязычными адресами и названиями файлов/страниц в Interner Explorere со страницы в FireFox. Причем как сетевых, так и внутренних (абсолютных и относительных), внутренние даже важнее.
Нашел несколько кнопок, но ни одна не заработала с русскоязычными ресурсами в IE (в Опере все ОК).
Примеры.
Кнопка открывает текущую страницу в IE
function openIElink() { var environment = Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment); var localFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var url = content.location.href; localFile.initWithPath(environment.get("PROGRAMFILES")+ "\\Internet Explorer\\iexplore.exe"); process.init(localFile); process.run(false, [url], 1); } openIElink();
C:\test.html - открытвает нормально
C:\тест.html - Не удается найти "file:///C:/%D1%82%D0%B5%D1%81%D1%82.html"
Причем файл %D1%82%D0%B5%D1%81%D1%82.html я создал на диске C
Добавил такую строку:
var url = Services.io.newURI(url, null, null).asciiSpec;
Итог
C:\test.html - открытвает нормально
C:\тест.html - Не удается найти "file:///C:/%D1%82%D0%B5%D1%81%D1%82.html"
Заменил ее на
var url = decodeURIComponent(url);
C:\test.html - открытвает нормально
C:\тест.html - Не удается найти "file:///C:/B5AB.html"
Причем файл B5AB.html созданный на диске С таким способом открывается (но он то мне не нужен ...)
Аналогично кнопка от bunda1 https://forum.mozilla-russia.org/viewtopic.php?pid=725309#p725309
Насколько я понял за захват и обработку ссылки отвечает блок
function openWith(path, arg) { try { var url = gContextMenu.getLinkURL() } catch(e) { var loc = content.document.location; var url = (loc.host.slice(-3) == '.рф') ? Services.io.newURI(loc.href, null, null).asciiSpec : loc; };
http://www.кто.рф открывает как http://www.:B>.@d/
ссылку типа href="тест.html" открывает как и предыдущая кнопка - Не удается найти "file:///C:/%D1%82%D0%B5%D1%81%D1%82.html"
с латиницей все нормально.
Что же делать?!
Отредактировано ruslaw (29-12-2017 02:14:07)
Отсутствует
Заменил ее на
var url = decodeURIComponent(url);
C:\test.html - открытвает нормально
C:\тест.html - Не удается найти "file:///C:/B5AB.html"
nsIProcess.runw() пробовал?
Отсутствует
Заменил ее на
var url = decodeURIComponent(url);
Знач, шота не то или не туда заменил ;-)
так открывает:
function openIElink() { var environment = Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment); var localFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var arg = decodeURIComponent(content.location); localFile.initWithPath(environment.get("PROGRAMFILES")+ "\\Internet Explorer\\iexplore.exe"); process.init(localFile); process.runw(false, [arg], 1); }
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
Ну смотри свои плугины, значит. мож кто перехватывает УРЛ строку. У мя открывает в IE из PM файл с таким именем:
c:\0l0\backup\PaleMoon\Распаковать файл поисковиков для FF (для PM пока не надо). 7-13-17 205346.htm
... да, с любым именем открывает. См. у себя плуги-скрипты.
ps. ты вызов добавил : openIElink(); ? У мя эта ф-ция в кнопке-меню живет и вызываеццо отдельно.
Добавлено 29-12-2017 11:41:54
т.е. фишка в том, что Dumby подсказал : юникодную функцию надо юзать для запуска runw + обратно из punycode декодировать адресс - decodeURIComponent();
/* CODE */ function openIElink() { var environment = Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment); var localFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var arg = decodeURIComponent(content.location); localFile.initWithPath(environment.get("PROGRAMFILES")+ "\\Internet Explorer\\iexplore.exe"); process.init(localFile); process.runw(false, [arg], 1); } openIElink();
Отредактировано mokujin (29-12-2017 11:41:54)
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
Да, проблема разрешена. Я просто не заметил последней строки - openIElink();
Но у меня еще вопрос.
У Вас была кнопка - https://forum.mozilla-russia.org/viewtopic.php?pid=732256#p732256
Я там сделал указанную замену, и она тоже работает как надо.
Но можно ли сделать так чтобы для вызова function openIElink() можно было просто нажимать ссылку, а не идти через КМ?
Чрезвычайно бы облегчило мою ситуацию.
С Наступающим НГ-2018 Вас.
Отсутствует
Но можно ли сделать так чтобы для вызова function openIElink() можно было просто нажимать ссылку, а не идти через КМ?
ЯННП КМ - ? (ПКМ??) - хочешь чтоб сразу все ссылки открывались в IE - а как ты будешь в Mozilla "бравзерить"...
можно добавить в ту кнопку, действие для клика на самом меню, типа так:
// после создания меню, после строчки menu.hidden = true; // добаь это. будет открывать в IE ссылку на кот. кликнул. menu.addEventListener("mouseup", function(ef) { // действие по нажатию на сам пункт меню switch(ef.button) { case 0: openIElink(); contextMenu.hidePopup(); break; } });
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
Спасибо, так гораздо ближе к моим целям.
Но я имел в виду что-то типа такой ссылки (чистая отсебятина) <a href="CustomButtonID=myButton; openIElink('C:\Мой Файл.html')"> которая при нажатии, безо всяких меню непосредственно вызывала бы этот файл в IE.
На самом же деле для меня Internet Explorer это лишь способ заставить исполняться bat-файл, вызываемый через javascript и было бы совсем чудесно, если бы можно было создать такую кнопку которая просто захватывала ссылку на bat-файл и заставляла его исполняться, особенно здорово если бы она действовала как я уже сказал выше - через ссылку, без необходимости обращаться к меню ....
Отсутствует
тебе нужно выполнить батнег из кнопки, чтоле? запустить батнег из бравзера и передать ему адресс ссылки, так? Это не сложно и можно.
передать ссылку в батнег - тут сложности есть. надо оборачивать в кавычки адресс(изза "амперсандов" и проч. спец.символов), передавать, а в батнеге брать его в переменную и обрезать set url="%url:~2,-2%"
нипанятна: что хочешь сделать.
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
Я там не совсемп понял что означает "скрипты которые следует помещать в вкладку Справка" и куда вставлять код приведенный под заголовком "Вкладка Код:". Увы я не очень в теме.
Суть моих поисков в том чтобы можно было открывать различные ссылки на внутренние файлы из FF, но так чтобы это происходило не в форме их закачивания в виде клона (как DOC или DJVU) или открытия во внутреннем просмотровщике (как с PDF), а как открытие исходного файла в дефолтной программе.
По-моему единственным способом получить такое поведение можно научив FF открывать батники, открывающие в свою очередь требуемый файл. И ссылки оформлять как ссылки на батники.
Вот я нашел кнопку
startProcess("C:\\start.bat",[""]); function startProcess(path, args) { var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); file.initWithPath(path); if(file.exists()) { var process = Components.classes["@mozilla.org/process/util;1"] .createInstance(Components.interfaces.nsIProcess); process.init(file); process.run(false, args, args.length); } else custombuttons. alertBox ("Файл не найден", path); };
Но она открывает один конкретный файл, что конечно не интресно.
А нельзя ли сделать что-то подобное кнопкам с открыванием ссылок в IE только вместо "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE" указать путь "C:\\windows\\system32\\cmd.exe"
Столь простая замена у меня не получилась, но может быть это можно как-то скорректировать
Отсутствует
*с интересом наблюдая как обновленцы пытаются поменять дворники через выхлопную трубу*
так и быть подкажу куда копать
process.run если ему указать любой файл открывает его в программе по-умолчанию т.е. если файл .txt то он откроется в блокноте если exe то запустится
получаем outerHTML ссылки и делаем реплейс href= на torun= и заменяем его изменённым
получаем атрибут torun правим его добавляя полный стандартный путь чтоб было c:\\ололо\\блабла.txt
добавляем к ссылке листенер на клик который получает атрибут torun и запускает с ним process.run
ессно все предыдущие действия пихаем в листенер на загрузку страницы чтоб ссылки колбасило автоматом.
я помню те времена когда обновления программ убирали проблемы и исправляли баги, а не добавляли их.
toxID:05AB9B827D896AACEE7FF4573A02FB8F025F46ADC856B98F65BC1BA9BD21A81DC98BA9C36CE3
Отсутствует
получаем outerHTML ..... делаем реплейс href= на torun= и заменяем .....
получаем атрибут .... правим ... добавляя ... чтоб было c:\\ололо\\блабла.txt
добавляем .... листенер ... ... получает атрибут torun и запускает с ним process.run... все .... пихаем в листенер на загрузку .... колбасило автоматом.
О, как всё просто , оказалось-то !
ruslaw
слушай, может тебе не мучаться, а поставить расширение , если уж очень хочеццо пользовать свой FF как обрезанный(очень сильно , прям по самые помидоры) TotalCommander ?
Расширение называется Fire Commander Там двухпанельный бравзер локальных файлов и все открывается как нарисовано в ОС.
ибо то, что набросал okkamas_knife я никак не смогу повторить, я даже что такое outerHTML хз
Я там не совсемп понял что означает "скрипты которые следует помещать в вкладку Справка" и куда вставлять код приведенный под заголовком "Вкладка Код:". Увы я не очень в теме.
Понимать надо прямо, вот как написано: Код - это вкладка КОД, а Справка - вкладка Справка (куда ложить текст батнег-а)
Вот пример:
/* CODE */ // Запуск CMD, BAT, VBScript из вкладки Справка // запускаемый батнег пишется в профиль // в случае VBSCRIPT наверное надо поменять выходную кодировку с 866 на 1251 хз. var file = Services.dirsvc.get('ProfD', Ci.nsIFile); file.append("myBatneg.cmd"); custombuttonsUtils.writeFile( file.path, convertFromUnicode("866", self.Help) ); file.launch();
Справка
/*HELP*/ @echo off @chcp 866 @rem ============================================================================== echo . echo Привет, я батнег из CustomButtons! echo . pause exit exit
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
mokujin пишет: я даже что такое outerHTML хз
*с видом маньяка-эксгибициониста распахнул плащ*
var hrefs=window.content.document.getElementsByTagName('a');
alert(hrefs[0].outerHTML)
alert(hrefs[0].innerHTML)
ессно на странице должны быть ссылки это покажет первую
я помню те времена когда обновления программ убирали проблемы и исправляли баги, а не добавляли их.
toxID:05AB9B827D896AACEE7FF4573A02FB8F025F46ADC856B98F65BC1BA9BD21A81DC98BA9C36CE3
Отсутствует
mokujin, спасибо, расширение классное, как раз для меня, я действительно поклонник такой идеологии (TC-браузер) хотя в моем данном случае оно конечно не решает проблему.
*с видом маньяка-эксгибициониста распахнул плащ*
к сожалению перед маньяком не "блондинка", а ребенок
Хотя я оценил полет мысли, но мне пришлось бы копать материал пару недель как минимум.
А нельзя ли набросать пример кнопки и ссылки чтобы их можно было использовать как шаблон?
Ну очень надо!
Отсутствует
Страницы: 1