Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » JS инжектирование HTML тега link

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

AVanti 473



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если очень коротко, то в макросе браузера K-Meleon, в вебстраничку, СКРИПТОМ, инжектируется подключение файла скрипта - вот так:
 

Код:
"var firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug)"

 
В результате, в коде веб странички появляется запись:

Код:
<script src="http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js"></script>

 
Нужно, чтобы точно таким же макаром (методом) появлялась запись:

Код:
<link href="http://getfirebug.com/releases/lite/1.2/firebug-lite.css" type="text/css" rel="stylesheet">

разумеется там, где она и должна появиться - между HTML-тегами:

Код:
<head></head>

ведь именно там подключаются таблицы стилей...
 
Заранее благодарю!

Всего записей: 366 | Зарегистр. 08-11-2015 | Отправлено: 11:49 22-10-2016 | Исправлено: AVanti 473, 14:29 28-10-2016
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti 473
попробуйте элементу id присвоить и по нему

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 14:31 22-10-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti 473
стоило из за этого новую тему создавать? в чем сложность то сделать по аналогии?

Код:
var link = document.createElement('link');
link.type = 'text/css';
link.rel = 'stylesheet';
link.href = 'путь к файлу';
document.head.appendChild(link);

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 18:09 22-10-2016 | Исправлено: Mavrikii, 18:19 22-10-2016
AVanti 473



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Благодарю Вас!!! Сегодня позже обязательно всё опробую. Не судите строго, в скриптах JS я ноль (не знаю что можно а что нет в синтаксисе, поэтому и с аналогией осторожен), а как таковой централизованной темы не нашёл. Заметил, что все по подобным вопросам делают отдельные топики, ну и поступил так же! Ещё раз СПАСИБО! Позже, отпишусь как всё прошло!
 
Добавлено:
Mavrikii
 
Работает такая конструкция:

Код:
var firebug=document.createElement('script');firebug.setAttribute('src','file://127.0.0.1/C:/getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug);var link = document.createElement('link');link.type = 'text/css';link.rel = 'stylesheet';link.href = 'file://127.0.0.1/C:/getfirebug.com/releases/lite/1.2/firebug-lite.css';document.head.appendChild(link)

 
Как видите, файлы я подключаю локально. Если Вы разбираетесь в скрипатх, подскажите пожалуйста, что надо конкретно вот этому:
http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js
"пришлёпнутому" скрипту, чтобы он нормально работал локально?
 
Дело в том, что я заметил, что подключая его локально, он напрочь отказывался импортировать в веб-страничку код подключения своей таблицы стилей. Причём независимо от того, располагалась она локально, или, как по ссылке в теле скрипта - онлайн. Если ссылку в теле скрипта заменить на локальную, он может работать только офлайн, то есть только на уже сохранённых и затем открытых в браузере страничках. На открытых из инета страничках он работать отказывается. Сейчас, с Вашей помощью, я внедрил ему подключение таблицы стилей и всё равно он выёживается. В чём у него затык? Подскажите пожалуйста...

Всего записей: 366 | Зарегистр. 08-11-2015 | Отправлено: 18:23 22-10-2016 | Исправлено: AVanti 473, 14:27 28-10-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti 473

Цитата:
В чём у него затык?

Смотрите консоль в браузере на сообщения об ошибках - там будет сказано что и почему.
Ну и путь достаточно писать как file:///c:/ и так далее, без 127.0.0.1

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 21:56 22-10-2016
AVanti 473



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
Смотрите консоль в браузере

 
Ну, на самом деле, файербаг и есть по сути консоль для таких исследований. Безусловно в K-Meleon есть и консоль ошибок, доступная по F12, но она никаких ошибок JS не показывает.
 

Цитата:
Ну и путь достаточно писать как file:///c:/ и так далее, без 127.0.0.1

 
Благодарю, знаю. На начальных экспериментах что-то вообще ничего не получалось, ну и я уже решил наверняка - с локальным адресом, поэтому полный путь ставил... По сути одно  то же, но, фиг его знает как в теле скрипта будут интерпретированы три слешки... )))

Всего записей: 366 | Зарегистр. 08-11-2015 | Отправлено: 23:06 22-10-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti 473

Цитата:
По сути одно  то же, но, фиг его знает как в теле скрипта будут интерпретированы три слешки

вставляете в адресную строку браузера и смотрите. не должно быть проблем.
 

Цитата:
но она никаких ошибок JS не показывает

у части браузеров есть ограничения по поводу подключения локальных файлов - сделано для безопасности. другое дело, что  

Код:
 
# K-Meleon Macros (http://kmeleon.sourceforge.net/wiki/index.php?id=MacroLanguage)
 
# ----------km firebug lite----------------------------------------------------------
 
 
firebug{injectJS("var firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug)");
}
 
firebug_BuildMenu{
setmenu("Development",inline,firebug_page,-1);
setmenu(firebug_page,macro,"Firebug Lite",firebug);
}
 
$OnInit=$OnInit."firebug_BuildMenu;";
# --------------------------------
$macroModules=$macroModules."firebug;";

Поэтому об особеностях работы конкретного браузера лучше спрашивать в теме о нем.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 23:22 22-10-2016
AVanti 473



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Поэтому об особеностях работы конкретного браузера лучше спрашивать в теме о нем.

 
Mavrikii
Да, всё верно! Отсюда http://forum.ru-board.com/topic.cgi?forum=5&topic=0888&start=3800#14 и до конца обсуждения, а так же здесь http://forum.geckoworld.ru/index.php/topic,239800.0.html
 
И в конечном итоге я тут.    
 
Если у Вас есть возможность разобраться и помочь - не сочтите пожалуйста за труд.    
 
Я не знаю, может к K-meleon вообще было бы проще подключить вот это (в разы лучше файербага): http://dragonfly.opera.com/app/zips/
Но, если по файербагу есть хоть какие-то наработки подключения и интеграции, то по драгонфлаю вообще ничего. Никто ведь не пробовал. В опере он офлайн отлично работает. Состоит всего из трёх файлов - xml-ка, файл скрипта и таблица стилей к нему. Если бы я в этом хоть что-то понимал..... Но не понимаю.  

Всего записей: 366 | Зарегистр. 08-11-2015 | Отправлено: 23:38 22-10-2016
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
.setAttribute(

в старых IE браузерах не работает

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 03:56 23-10-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vs6262

Цитата:
в старых IE браузерах не работает

1) речь не об IE
2) работает, не работает вставка обработчика, а атрибуты выставляются без проблем
 
AVanti 473

Цитата:
Если у Вас есть возможность разобраться и помочь

да я то многое могу, но разбираться из за этого в браузере, которым не пользуюсь.  
и если уж не дали решение те, кто им действительно пользуется.. либо они не поняли проблемы.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 04:09 23-10-2016 | Исправлено: Mavrikii, 04:12 23-10-2016
AVanti 473



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
и если уж не дали решение те, кто им действительно пользуется.. либо они не поняли проблемы

 
Проблему все понимают. Поверьте, проблеме уже не один год. Похожие ситуации есть и в командах других браузеров. Для сравнения, тот же драгонфлай в опере долго никто не мог прикрутить локально, хотя, достаточно было скачать дистрибутив, поместить его в нужное место и исправить пару строчек подключения в файлах конфигурации меню. )))
 
А вот что касается K-Meleon - одно дело освоить относительно простенький макроязык http://kmeleonbrowser.org/wiki/MacroLanguage2Ru , и совсем другое знание JS. Пользователи K-Meleon сосредоточены на поддержке и развитии возможностей браузера при помощи макросов и новых дополнений, но сами они не являются разработчиками этих дополнений. В результате, только и ходят слухи, что кто-то где-то смог прикрутить чуть ли не полноценный файербаг в этот браузер. На поверку это всё оказывается, как правило, фейком. Разработчики же самого файербага давно сообщили, что полноценный его вариант будет лишь в файерфоксе, а лайт доступен всем желающим https://getfirebug.com/firebuglite. Именно это и было взято за основу в том макросе выше, который Вы полностью привели в пример.
 
Я сам только неделю назад пришёл к браузеру K-Meleon. Нужно было что-то неплохо настраиваемое, относительно лёгкое, понятное, расширяемое, относительно удобное и главное - хорошо портабелизируемое в ThinApp. Сам я, на постоянной основе, пользую эту http://avanti473.ru/news.php?readmore=99 сборку, на движке Presto, но увы, она уже сильно устарела (не открывает многие HTTPS сайты, не корректно обрабатывает скриптовые фреймы). Перепробовал массу топовых браузеров (хром, айрон, мозилу, палмун, IE, + ряд малоизвестных) и остановился на K-Meleon (хоть он и на базе того-же мозиловского движка Gecko). Разумеется, сразу начал подбирать всё то, что мне привычно иметь под рукой. Надо заметить, нашёл более 80% привычного функционала. Как я уже говорил, если бы в K-Meleon можно было пришить оперовский драгонфлай - это была бы вообще песня! Вполне возможно, что в этом случае, я бы вообще перебрался на использование K-Meleon на постоянной основе. Но, я такого (в плане JS) делать не умею, да и никто из команды поддержки (из тех с кем успел пообщаться), похоже тоже. Вот, есть слабенький аналог в виде файербага лайт, и то - только онлайн. Если уж ничего, то хотя бы его. Разумеется, прежде чем просить помощи, как Вы понимаете, я сделал всё, что было в моих силах, чтобы понять суть проблемы. Увы, далше идут чистые JS, где я полный ноль. Поэтому и прошу Вашей помощи, если, конечно, это возможно...

Всего записей: 366 | Зарегистр. 08-11-2015 | Отправлено: 07:52 23-10-2016 | Исправлено: AVanti 473, 08:08 23-10-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti 473
насчет комбинации файлов локальных и из сети - http://kb.mozillazine.org/Firefox_:_Issues_:_Links_to_Local_Pages_Don%27t_Work
и говорили, что в консоли нет сообщений - все там есть

Код:
Mon Oct 24 2016 18:53:23
Error: SyntaxError: An invalid or illegal string was specified
Source file: file:///***/firebug-lite-compressed.js
Line: 116

и этого сообщения, ессно, нет когда открывается html файл с диска.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 01:59 25-10-2016
AVanti 473



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
насчет комбинации файлов локальных и из сети - http://kb.mozillazine.org/Firefox_:_Issues_:_Links_to_Local_Pages_Don%27t_Work

 
Ага, понятно. Значит, как вариант - расширение NoScript с настройками разрешения выполнения локальных файлов скриптов. Беда в том, что оно не подходит для K-Meleon, а экспериментальный XPI Extension Converter, либо не может с ним справится, либо у меня руки кривые...
Тогда остаётся лишь один, известный мне, вариант. Дело в том, что, поэкспериментировав, я заметил, что скрипт прекрасно подгружается вместе со своей таблицей стилей, без каких либо доработок (за исключением замены соответствующих ссылок), если его расположить локально, скажем, на сервере Denwer. Проблема в том, что денвер весьмма неповоротлив, долго стартует, и делает себе виртуальный диск на время работы. Остаётся попробовать поискать какой-нибудь лёгкий локальный сервер, не очень сложный в настройке и быстрый при запуске... В таком случае, и политика безопасности браузера K-Meleon будет соблюдена, и все нужные скрипты будут работать локально... В теории, конечно. ))))) Как Вы считаете?

Всего записей: 366 | Зарегистр. 08-11-2015 | Отправлено: 07:13 25-10-2016 | Исправлено: AVanti 473, 07:14 25-10-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti 473

Цитата:
Как Вы считаете?

я считаю, что есть куча других браузеров. и если есть интернет, то достаточно грузить скрипт с внешнего CDN. либо, вообще, просто скопировать содержимое скрипта в блок, что делает вставку его загрузки. тогда никакого файла не нужно вообще (ну разве что стили, но в браузере, мельком заметил, есть и для них отдельная опция)
 
а если уж приспичило запускать локально что то, то никак не тяжелый денвер - для статики он вообще не нужен.  
там нужны или nginx или https://github.com/cesanta/mongoose

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 07:25 25-10-2016 | Исправлено: Mavrikii, 07:31 25-10-2016
AVanti 473



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
а если уж приспичило запускать локально что то, то никак не тяжелый денвер - для статики он вообще не нужен.   там нужны или nginx или https://github.com/cesanta/mongoose

 
Благодарю, сегодня после работы попробую изучить этот вопрос.
 

Цитата:
либо, вообще, просто скопировать содержимое скрипта в блок, что делает вставку его загрузки

Поскольку Вы уже знакомы с сутью вопроса, и применимо к K-Meleon (и его макросам иже с ним), если Вас не слишком затруднит, не могли бы рассказать об этом подробнее, насколько это возможно? ))

Всего записей: 366 | Зарегистр. 08-11-2015 | Отправлено: 07:51 25-10-2016 | Исправлено: AVanti 473, 07:52 25-10-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti 473

Цитата:
рассказать об этом подробнее, насколько это возможно?

берем содержимое js файла и аккуратно вставляем вместо

Код:
var firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);

а из оставшегося кода достаточно оставить
Код:
firebug.init();

может и не все так, навскидку.
ps: и будут проблемы с кавычками, так как " в коде закроет первоначальные - нужно экранировать

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 07:57 25-10-2016 | Исправлено: Mavrikii, 08:03 25-10-2016
AVanti 473



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
может и не все так, навскидку.

 
Mavrikii
На самом деле эта первая из тех мыслей во время теста, которая пришла мне в голову. То есть поставить в  injectJS( JS ); весь код скрипта, а следом применить injectCSS( CSS );
Как Вы помните, в скриптах я полный ноль. Но, взглянув в тело скрипта увидел, что там море кавычек, скобок, точек с запятой и т.д. Первое о чём тогда подумалось - как MacroLanguage K-Meleon поймёт, где начинается и заканчивается его собственный синтаксис, и как он отделит его от синтаксиса скрипта? Казалось бы, для этого есть  $CONTENT = readfile( PATH ); НО размер внедряемого файла ограничен 32 Килобайтами, а скрипт порядком так больше раза в два. ))) Пытался тогда что-то вставлять, как гриться - тужился пыжился - ничего не получилось. Сейчас вот, Вы сказали об экранировании кавычек. Важный момент, но где и что именно экранировать - я не понимаю. Поскольку мне сложновато разобраться в одной строчке скрипта, наверняка, ещё сложнее будет разобраться в целом скрипте. То есть, я понимаю, что всё находящееся в конструкции injectJS(" "); между кавычками, должно передаваться в макрос как чистый скрипт, но 2342 кавычки в самом теле скрипта - это немного сложноватая задачка... ))) Даже при пакетной замене на экранированные варианты.... случаи-то бывают разные. Вы же сами говорите - на вскидку... ))

Всего записей: 366 | Зарегистр. 08-11-2015 | Отправлено: 08:45 25-10-2016 | Исправлено: AVanti 473, 08:47 25-10-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti 473

Цитата:
Но, взглянув в тело скрипта увидел, что там море кавычек, скобок, точек с запятой и т.д.

я же написал - нужно экранировать " в коде, то есть просто заменить их на \"
все остальное идет как строка внутри  
injectJS("тут код в виде строки")
 

Цитата:
Даже при пакетной замене на экранированные варианты.... случаи-то бывают разные.

нет тут таких случаев, просто одна текстовая строка.

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 08:54 25-10-2016 | Исправлено: Mavrikii, 08:56 25-10-2016
AVanti 473



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
" в коде, то есть просто заменить их на \"

 
Mavrikii
 
Ага, а как же быть с тем, что в скрипте уже есть 52 \ (обратных слешки) ? )))Они как будут зачитываться? Как экраны, допустимые в скрипте, или как экраны в строке скрипта? Тут не будет наложения синтаксиса?

Всего записей: 366 | Зарегистр. 08-11-2015 | Отправлено: 09:53 25-10-2016 | Исправлено: AVanti 473, 09:54 25-10-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti 473

Цитата:
\ (обратных слешки) ?

значит экранируйте и их.
 

Цитата:
Они как будут зачитываться?

самое простое - попробовать и посмотреть, например тут  
https://jsfiddle.net/qhuhwnzL/

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 10:00 25-10-2016
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » JS инжектирование HTML тега link


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru