Страницы: 1
Пусть имеется html-страница, в которой есть ссылки типа <a href="file://d:\myfile.htm"> и рисунки типа <img src="file://d:\mypic.gif">. Если такуб страницу открывать на локальном компьютере, то всё нормально, а вот если загружать её из интернета, то ссылки не открываются, картинки не показываются. Ну ссылки ещё ладно (может, это такая странная борьба за безопасность?) - можно самому написать обработчик OnClick, который их открывать будет, а вот с рисунками что сделать?
Отсутствует
Да ладно, слэши тут не сильно важны: я уже с разными вариантами пробовал, результат всегда одинаковый - на локальной странице работает, на удалённой нет...
:::: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.8) Gecko/20050511 Firefox/1.0.4
Отредактировано comp3v (05-06-2005 18:06:56)
Отсутствует
Нет, на сервере этих файлов, конечно, нет - в том-то и проблема: хочется, чтобы можно было ссылаться на локальные файлы.
Например, если моё расширение заменяет на загруженной страничке src="" с удалённого на локальный файл - он не отображается
Отсутствует
<script> function hack() { alert(document.getElementById("hack").contentDocument.documentElement.innerHTML); } </script> <iframe id="hack" src="file://E:\pass.txt" onload="hack()"/>
И дальше я могу делать с содержимым этого iframe всё, что мне придёт в голову (например, могу отправить на определённый e-mail), если бы не одно "но":
Security Error:
Content at http://localhost/test.html may not load or link
to file:///E:/pass.txt.
Так что рекомедуется подумать над фразой "странная борьба за безопасность".
Отсутствует
Ну хорошо, в этом примере такой запрет действительно оправдан. Но если это будет делать моё расширение - ведь подразумевается, что пользователь ему доверяет, если установил его? или должен быть какой-то способ разрешить расширению подобные действия?
И наконец, в чём виноваты рисунки? если мне в моём расширении надо позаменять рисунки на свои, локальные - неужели это тоже невозможно?
Отсутствует
Хм... не очень понял, причём тут проблемы с сайтами - я был уверен, что это исключительно вопрос функционирования Firefox'а... Ну ладно - мне бы главное проблему решить, а в каком разделе помогут, уже не так важно
Отсутствует
Например, если моё расширение заменяет на загруженной страничке src="" с удалённого на локальный файл - он не отображается
Перерисовка страницы? (иногда такое бывает)
anyway, рекомендуется ещё раз подумать над вопросом безопасности.
Отредактировано Mash (06-06-2005 03:18:37)
Отсутствует
Перерисовка страницы? (иногда такое бывает)
Что имеется в виду? что перерисовка не происходит, хотя должна? а от чего тогда это может зависеть? (напомню, что локально загруженные страницы отрисовываются нормально)
так а как я тут ещё могу подумать??? я же говорю: расширениям, по идее, такие штуки должны позволяться! тем более в отношении рисунков - от них угроза сомнительная...
Отредактировано comp3v (06-06-2005 09:23:22)
Отсутствует
Я так понимаю, что расширение ищет нечто на странице и меняет на заранее известную графику? Загоните её в "base64" и меняёте.
<IMG SRC="data:image/gif;base64,............... /> (RFC 2397)
Такое подойдёт?
Отсутствует
А при этом обязательно придётся в каждом случае всё содержимое gif'a напрямую вписывать?
С пхп (или другим чем) знакомы?
Для расширения нет существенной разницы между ссылкой на файл и таким представлением.
Отсутствует
C php-то знаком - просто не хотелось бы сильно раздувать файл (если там этих картинок будет порядка сотни, то вставка содержимого в каждый src сильно увеличит размер)
Для расширения нет существенной разницы между ссылкой на файл и таким представлением.
Извиняюсь, я опять туплю - что имеется в виду?
Отсутствует
ok, я несколько сумбурно отвечал в этом топике, давайте попробуем начать с чистого листа.
Например, если моё расширение заменяет на загруженной страничке src="" с удалённого на локальный файл - он не отображается
Я исхожу из того, что количество этих локальных файлов-картинок (иконок каких-нибудь, а не метровых *.bmp, я надеюсь), на которые будут меняться какие-то удалённые файлы, известно. Допустим, их у нас 10 штук.
Переводим их в формат, соответствующий rfc 2397, пакуем расширение, пользователи качают, ставят, пользуются.
10 х ~5kb = 50kb, не так уж и много, с учётом того, что расширение скачивается один раз.
Сказав, что "для расширения нет существенной разницы между ссылкой на файл и таким представлением", я имел ввиду, что у пользователей этих иконок изначально ведь нет, так(?); поэтому, скачают они их вместе с раширением в виде обычных файлов или в таком представлении -- разницы нет.
Вторая ситуация, которая мне приходит в голову: у вас есть желание написать расширение, меняющее графику, но файлы-"заменители" заранее не известны и, например, право их выбора отдано пользователю.
В этом случае нужно написать код, который при выборе пользователем файла-"заменителя" считывает этот файл, конвертирует его собственными средствами Mozilla и сохраняет куда-нибудь для дальнейшего использования.
В любом из этих случаев я никак не пойму смысл фразы
"просто не хотелось бы сильно раздувать файл"
Какой файл? Тот, что на сервере? А зачем его раздувать?
Так что, раз уж пробуем начать сначала , давайте вы более подробно опишите что же собственно вы хотите написать, потому как всё это похоже на разговор о двух разных вещах и каждый, говоря, подразумевает не то, что думает собеседник.
Отредактировано Mash (06-06-2005 18:13:27)
Отсутствует
Большое спасибо за подробное объяснение. В общем, ситуация для меня более-менее прояснилась, но я всё же, действительно, попробую описать ещё раз мою ситуацию .
Итак, пользователь открывает в браузере некую страничку, в которой имеются картинки (в количестве порядка 100 штук). Моё расширение должно эти картинки заменить на локальные, пользовательские (причём картинка-замена действительно определяется пользователем, а не входит в состав расширения). Говоря о том, что "не хотелось бы раздувать файл", я имел в виду саму открытую страничку - насколько я понял, единственный способ достичь желаемого - это вместо ссылки в src="..." в каждый <img> вписывать src="data:image/gif;base64,...". По большому счёту, увеличение будет не таким уж большим (типа, 100 х ~5kb = 500kb), но мне просто не понравился сам по себе такой способ решения проблемы: больно уж неуклюже - я думал, что можно всё-таки каким-то образом заставить отображать файлы по ссылке, а не прописывать каждый раз всё содержимое!
...Уфф... на этот раз, кажется, у меня несколько сумбурно получилось... но мысль понятна?
Отсутствует
А, ну, тогда можно попробовать написать нечто основанное на принципах FlashBlock.
Логика такая: при выборе пользователем картинки-"заменителя" эта картинка копируется в папку расширения, а при дальнейшей работе в src картинок, требующих замены, подставляется путь по протоколу chrome (что-то в духе "chrome://имя_расширения/content/user_pics/picture_1.gif") Только .jar-архив в этом случае не нужно создавать, чтобы иметь возможность копировать файлы, выбранные пользователем, в каталог расширения (пример -- greasemonkey, там в каталог расширения записываются пользовательские скрипты).
А использовать принцип FlashBlock можно так:
(CSS) img[src] { -moz-binding: url("chrome://имя_расширения/content/replace.xml#replace") !important; }
(replace.xml) <?xml version="1.0"?> <bindings xmlns="http://www.mozilla.org/xbl" xmlns:html="http://www.w3.org/1999/xhtml"> <binding id="replace"> <implementation> <constructor> <![CDATA[ // ...................... // ...................... img.src = "chrome://имя_расширения/content/user_pics/" + picName; // ...................... // ...................... ]]> </constructor> </implementation> </binding> </bindings>
Сразу говорю, что
1) я не знаю, сработает ли это или сработает ли это именно так, как хочется;
2) то, что приведено выше, совсем не код, а просто набросок, принцип. И даже в этом наброске м.б. ошибка. Времени тестировать, расписывать и думать нет.
И ещё одна мысль: попробуйте поискать, м.б. кто-то уже написал что-то подобное?
Отредактировано Mash (06-06-2005 18:57:17)
Отсутствует
ps. Возможно, что есть более лучший способ, но я обычно иду путём "Нам лёгкости не нужны, только стоя и в гамаке" и лишь потом бью себя по лбу, приговаривая "Во дурак-то!". Как сделать лучше -- пока не знаю, да и вряд ли сейчас стану думать на эту тему.
Отсутствует
Ещё раз большое спасибо, сейчас буду ковыряться с приведённым примером. То есть, что касается просто подстановки chrome://... в качестве src, то это точно работает: это я как раз уже пробовал, только без использования css, как в примере, а просто тупо заменяя ссылку скриптом. На тот момент меня это не устроило, поскольку хотелось решить проблему более глобально (в частности, чтобы можно было не только рисунки локальные подгружать, но и на произвольные локальные файлы ссылаться, а их-то в состав расширения уже не запихнёшь!), но теперь, наверное, придётся на этом и остановиться.
И ещё одна мысль: попробуйте поискать, м.б. кто-то уже написал что-то подобное?
Дык, я искал, конечно! Поковырялся в десятке чужих расширений, но как-то ничего подобного не нашёл. Потому и начал здесь народ доставать. (Ещё спросил на форуме xulplanet.com, но там как-то и вовсе не ответили ) Вообще, меня не оставляет мысль, что существует некий способ включать это дело более изящно - через какие-нибудь настройки безопасности, что ли?...
Отсутствует
Можно пример скрипта на greasemonkey который заменяет картинки на те, что локально лежат - хочется сайт перелицевать, предложить так сказать альтернативу людям, а то потом и самому сайту?
Отредактировано Krechet2013 (13-04-2012 15:06:06)
Отсутствует
Страницы: 1