Страницы: 1
Необходимо определить допустимую в приложении версию JavaScript, чтобы правильно сформировать атрибут type элемента script в динамически формируемом оверлее.
Так вот, как точно узнать какой "хвост" писать в type="application/x-javascript;version=..." (и писать ли вообще) ?
Кому-нибудь попадалась подходящая метода ?
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Я встречал вот такое определение (только там было с text/javascript – для всяких там IE):
<script type="application/x-javascript;version=1.5">var jsVers = "1.5";</script> <script type="application/x-javascript;version=1.6">jsVers = "1.6";</script> <!-- и т.д. -->
Выглядит не особо, ага.
Или что-то вроде этого:
var info = Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo); /* var res = []; for(var p in info) res.push("." + p + " = " + info[p]); alert(res.join("\n")); */ var geckoVers = info.platformVersion; var jsVers = "1.5"; if(/ что-то там /.test(geckoVers)) jsVers = "1.6"; else if(/ что-то там /.test(geckoVers)) jsVers = "1.7"; // и т.д.
Но мне все-таки кажется, что должна быть возможность напрямую версию спросить...
Отредактировано Infocatcher (08-01-2009 22:47:53)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Я встречал вот такое определение (только там было с text/javascript – для всяких там IE):
Выделить кодКод:
<script type="application/x-javascript;version=1.5">var jsVers = "1.5";</script> <script type="application/x-javascript;version=1.6">jsVers = "1.6";</script> <!-- и т.д. -->Выглядит не особо, ага.
Я вот на скорую руку проверил (FF2)
в случае
<script type="application/x-javascript;version=1.8" src="chrome://custombuttons/content/cbbutton.js"/> <script type="application/x-javascript;version=1.7" src="chrome://custombuttons/content/cbbutton.js"/> <script type="application/x-javascript" src="chrome://custombuttons/content/cbbutton.js"/>
работает, а если
<script type="application/x-javascript" src="chrome://custombuttons/content/cbbutton.js"/> <script type="application/x-javascript;version=1.7" src="chrome://custombuttons/content/cbbutton.js"/> <script type="application/x-javascript;version=1.8" src="chrome://custombuttons/content/cbbutton.js"/>
уже нет. Знать бы наверняка, что первый вариант есть абсолютно правильный при необходимости поддержки нескольких версий JavaScript.
Может быть, где-то есть точная достоверная информация на эту тему ?
Но мне все-таки кажется, что должна быть возможность напрямую версию спросить...
Чёрт его знает. Часа четыре убил, ничего подходящего не нашёл.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Интересно, а зачем вообще это надо? Почему нельзя просто использовать наименьшую поддерживаемую версию: для веб-страниц - видимо 1.5, а для расширений можно поставить соответствующую minVersion (например, JS 1.7 и Firefox 2.0+).
Отсутствует
Почему нельзя просто использовать наименьшую поддерживаемую версию
Расширение CustomButtons работает в FF 1.5-3.2, TB 2.0-3.0, SB 0.8-0.9, Flock. Код кнопок вызывается из скриптов расширения, поэтому, если поставить минимальную версию, в коде кнопок нельзя будет пользоваться возможностями старших версий JavaScript, даже если приложение их поддерживает. Если ставить максимальную версию, надо будет поддерживать несколько вариантов каждой версии расширения пока все Gecko-based приложения не "устаканятся" на единой версии JavaScript.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
<script type="text/javascript"> var jsver = 1.0; </script> <script language="Javascript1.7"> jsver = 1.7; </script> <script language="Javascript1.8"> jsver = 1.8; </script> <script language="Javascript1.9"> jsver = 1.9; </script> <script type="text/javascript"> alert(jsver); </script>
Отсутствует
<script language="Javascript1.7">
Все же это я спутал – я именно такой вариант встречал (вроде, в каком-то счетчике).
А вот Firefox (по идее, вместе со всеми gecko-программами) вполне себе внятно реагирует и на
<script type="application/x-javascript;version=1.7">
P.S. Накопал у себя демонстрашку: js_version.html
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
А вот, положим
и как я из компоненты доберусь до jsver ? : ) (не говоря уже о том, что версию js мне надо "сделать" до загрузки скрипта).
А вот ещё такая штука:
<script type="application/x-javascript">alert (jsVer1 + "/ " + jsVer2 + "/ " + jsVer3 + "/ " + jsVer4);</script> <script type="application/x-javascript">var jsVer1 = 1.5; alert ("jsVer1 = " + jsVer1);</script> <script type="application/x-javascript;version=1.6">var jsVer1 = 1.6; alert ("jsVer1 = " + jsVer1);</script> <script type="application/x-javascript;version=1.7">var jsVer1 = 1.7; alert ("jsVer1 = " + jsVer1);</script> <script type="application/x-javascript;version=1.8">var jsVer1 = 1.8; alert ("jsVer1 = " + jsVer1);</script> <script type="application/x-javascript;version=1.8">var jsVer2 = 1.8; alert ("jsVer2 = " + jsVer2);</script> <script type="application/x-javascript;version=1.7">var jsVer2 = 1.7; alert ("jsVer2 = " + jsVer2);</script> <script type="application/x-javascript;version=1.6">var jsVer2 = 1.6; alert ("jsVer2 = " + jsVer2);</script> <script type="application/x-javascript">var jsVer2 = 1.5; alert ("jsVer2 = " + jsVer2);</script> <script type="text/javascript">var jsVer3 = 1.5; alert ("jsVer3 = " + jsVer3);</script> <script language="Javascript1.6">var jsVer3 = 1.6; alert ("jsVer3 = " + jsVer3);</script> <script language="Javascript1.7">var jsVer3 = 1.7; alert ("jsVer3 = " + jsVer3);</script> <script language="Javascript1.8">var jsVer3 = 1.8; alert ("jsVer3 = " + jsVer3);</script> <script language="Javascript1.8">var jsVer4 = 1.8; alert ("jsVer4 = " + jsVer4);</script> <script language="Javascript1.7">var jsVer4 = 1.7; alert ("jsVer4 = " + jsVer4);</script> <script language="Javascript1.6">var jsVer4 = 1.6; alert ("jsVer4 = " + jsVer4);</script> <script type="text/javascript">var jsVer4 = 1.5; alert ("jsVer4 = " + jsVer4);</script> <script type="application/x-javascript">alert (jsVer1 + ": " + jsVer2 + ": " + jsVer3 + ": " + jsVer4);</script>
FF2: 3 алерта jsVer1, 3 алерта jsVer2, 3 алерта jsVer3, 0 алертов jsVer4, 0 алертов от первого и последнего скриптов.
FF3: 4 алерта jsVer1, 4 алерта jsVer2, 4 алерта jsVer4, 4 алерта jsVer4, 1 алерт от последнего скрипта
Другой вариант:
<script type="application/x-javascript" src="jsVer1.js"/> <script type="application/x-javascript;version=1.6" src="jsVer1.js"/> <script type="application/x-javascript;version=1.7" src="jsVer1.js"/> <script type="application/x-javascript;version=1.8" src="jsVer1.js"/> <script type="application/x-javascript;version=1.8" src="jsVer2.js"/> <script type="application/x-javascript;version=1.7" src="jsVer2.js"/> <script type="application/x-javascript;version=1.6" src="jsVer2.js"/> <script type="application/x-javascript" src="jsVer2.js"/> <script type="text/javascript" src="jsVer3.js"/> <script language="Javascript1.6" src="jsVer3.js"/> <script language="Javascript1.7" src="jsVer3.js"/> <script language="Javascript1.8" src="jsVer3.js"/> <script language="Javascript1.8" scr="jsVer4.js"/> <script language="Javascript1.7" scr="jsVer4.js"/> <script language="Javascript1.6" scr="jsVer4.js"/> <script type="text/javascript" scr="jsVer4.js"/>
(скрипт jsVer1.js содержит alert ("jsVer1"); и т. д.)
FF2: 4(!) алерта jsVer1, 4(!) алерта jsVer2, 3 алерта jsVer3, 0 алертов jsVer4
FF3: 4 алерта jsVer1, 4 алерта jsVer2, 4 алерта jsVer3, 0 алертов jsVer4
Количество алертов обрекает на необходимость держать в голове возможность сторонних эффектов от повторного исполнения скриптов.
X версионных оверлеев x Y перекрываемых xul-ов в chrome.manifest не воодушевляют (собственно, этому и ищу альтернативу).
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Расширение CustomButtons работает в FF 1.5-3.2, TB 2.0-3.0, SB 0.8-0.9, Flock.
Мб и не самый лучший вариант, но почему бы просто не прописать таблицу версий JS в привязке к версии проги?
--- ---
Отсутствует
Forest
Нормальный вариант, правда, лучше привязку делать по версии платформы (прог много, версии у них разные, а платформа - одна).
Где бы взять наиболее достоверную таблицу.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Где бы взять наиболее достоверную таблицу.
Отсутствует
Crazy-EyE
JavaScript versions
Надёжный источник, но почему не достоверный ?
Почему FF1.5/FF2 - Mozilla-based, а FF3 - Gecko-based ?
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Кстати, распространённый способ определения версии - проверка на наличие функции, которая есть в нужной версии
А прямого получения версии действительно как-то не наблюдается
--- ---
Отсутствует
Из новой версии Greasemonkey, файл components\greasemonkey.js:
const maxJSVersion = (function getMaxJSVersion() { // Default to version 1.6, which FF1.5 and later support. var jsVersion = 160; var jsds = Cc["@mozilla.org/js/jsd/debugger-service;1"].getService() .QueryInterface(Ci.jsdIDebuggerService); jsds.on(); jsds.enumerateContexts({ enumerateContext: function(context) { if (context.version > jsVersion) jsVersion = context.version; }}); jsds.off(); return (jsVersion / 100).toString(); })();
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Страницы: 1