>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Определить допустимую версию JavaScript http://forum.mozilla-russia.org/viewtopic.php?id=29540 |
Anton > 08-01-2009 21:55:41 |
Необходимо определить допустимую в приложении версию JavaScript, чтобы правильно сформировать атрибут type элемента script в динамически формируемом оверлее. |
Infocatcher > 08-01-2009 22:47:20 |
Я встречал вот такое определение (только там было с 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"; // и т.д. Но мне все-таки кажется, что должна быть возможность напрямую версию спросить... |
Anton > 08-01-2009 23:29:54 |
Infocatcher пишет
Я вот на скорую руку проверил (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.
Чёрт его знает. Часа четыре убил, ничего подходящего не нашёл. |
Crazy-EyE > 09-01-2009 05:48:17 |
Интересно, а зачем вообще это надо? Почему нельзя просто использовать наименьшую поддерживаемую версию: для веб-страниц - видимо 1.5, а для расширений можно поставить соответствующую minVersion (например, JS 1.7 и Firefox 2.0+). |
Anton > 09-01-2009 06:21:47 |
Расширение CustomButtons работает в FF 1.5-3.2, TB 2.0-3.0, SB 0.8-0.9, Flock. Код кнопок вызывается из скриптов расширения, поэтому, если поставить минимальную версию, в коде кнопок нельзя будет пользоваться возможностями старших версий JavaScript, даже если приложение их поддерживает. Если ставить максимальную версию, надо будет поддерживать несколько вариантов каждой версии расширения пока все Gecko-based приложения не "устаканятся" на единой версии JavaScript. |
Shutnik > 09-01-2009 14:20:07 |
Выделить код Код:<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> |
Infocatcher > 09-01-2009 14:36:44 |
Shutnik пишет
Все же это я спутал – я именно такой вариант встречал (вроде, в каком-то счетчике). P.S. Накопал у себя демонстрашку: js_version.html |
Al_H > 09-01-2009 16:12:14 |
Это разве корректный type? |
Anton > 09-01-2009 16:14:30 |
А вот, положим и как я из компоненты доберусь до 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 алертов от первого и последнего скриптов. Другой вариант: Выделить код Код:<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"); и т. д.) Количество алертов обрекает на необходимость держать в голове возможность сторонних эффектов от повторного исполнения скриптов. X версионных оверлеев x Y перекрываемых xul-ов в chrome.manifest не воодушевляют (собственно, этому и ищу альтернативу). |
Forest > 11-01-2009 11:21:41 |
Anton пишет
Мб и не самый лучший вариант, но почему бы просто не прописать таблицу версий JS в привязке к версии проги? |
Anton > 11-01-2009 16:41:00 |
Forest |
Crazy-EyE > 11-01-2009 18:58:57 |
|
Anton > 11-01-2009 19:32:02 |
Crazy-EyE
Надёжный источник, но почему не достоверный ? |
Forest > 12-01-2009 00:01:22 |
Кстати, распространённый способ определения версии - проверка на наличие функции, которая есть в нужной версии |
Infocatcher > 28-09-2009 03:09:16 |
Из новой версии 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(); })(); |