dojo/has提供了标准化的特征检测。 它是基于 has.js 项目(约定了方法签名,比如 has方法,有哪些参数,参数顺序等,相当于提供了一个标准,大家都按这个标准去做的话,那么特征检测在所有的库中就可以通用了)
介绍
has.add("dom",function(){return true}); //特征测试 if(has(dom){ // has(dom) 就是需要先检测某个特征。如果有缓存结果,直接调用缓存,如果没有,执行上面的测试代码 // do someting }
dojo/has 模块主要是为dojo的模块提供标准的特征测试和特征检测。 虽然 dojo/has API 实现了 has.js 规范中的方法和 规定的特征名,但dojo模块用的是自己的特征检测。
dojo/has 特征检测是懒实例化, 什么意思呢? 就是特征测试代码只会在请求某个特征时才会运行,并且为之后相同的特征检测 缓存结果。
Dojo Core 和 Dijit 模块使用 dojo/has 做特征检测。 但还是有很多 DojoX 项目是继续使用dojo.isXXX 的浏览器代理 user agent侦测技术。 这是一个慢慢演进的过程。
dojo/has 可以作为一个插件,通过三元表达式(?:),实现有条件加载模块。
基本的测试是定义在dojo/has模块,在附加在相应模块上的特征和测试,可以增强相应模块的特征检测。 最常使用的 dojo/sniff 就是扩展 dojo/has,并添加自己额外的测试。
使用staticHasFeatures 在编译配置里, 并结合 Google 的 closure 可以删除无效代码的路径。 查看 builder 文档获得更多的信息.
使用
define(["dojo/has"],function(has){ if(has("dom")){ // Do something based on feature } });
特征检测一般会返回一个 "truthy"(Something which evaluates to TRUE,看了下goole的解释,代表的这个值是需要评估的,这里主要是突出评估,对像,函数,数组都是truthy. 但比如特征检测用到的测试函数,函数就是一个truthy,但这个测试函数可能会回返一个false的值。这样理解,不知道是对还是错。) 的值。意思是如果功能存在, 返回一个true,如果不顾在,返回false.
这个模块可以被用于loader的插件, 这么做, 插件的参数是一个三元逻辑表达式, 第一个参数就是feature,第二个是当 feature为true时要加载的模块,第三个是为false要加载的模块。
require(["dojo/has!feature?package/module:package/other"],function(featureModule){ // If feature is true,package/module loaded // If feature is false,package/other loaded });
注册一个特征检测需要提供特征检测的名称和测试函数:
has.add("some-test-name",function(global,document,anElement){ // Feature dection code,returning a truthy value if true return true; });
测试函数应该接受三个参数:
Argument | Description |
---|---|
global | 引用全局作域 |
document | 引用document对像 |
anElement | 是否需要使用到某个HTML元素 |
注意, 任何测试函数都应该自行清理, 这样不会导致内存的溢出。
has.add("some-other-test",function(){ return false; // Boolean },true);
虽然你可以如下,传递一个非封装的函数,但这是不被建议的:
// this is not wrapped in a function,and should be: has.add("some-other-test",("foo" in bar)); // or whatever
没有被函数封装, 它会立即执行,而不是之前的那样,在实际需要进行代码检测的路径里执行。
特征名称
Module | Feature | Description |
---|---|---|
dojo/_base/browser | config-selectorEngine | Pre-configured selector engine to use in dojo/query,defaults to dojo/selector/acme. |
dojo/_base/connect | events-keypress-typed | Keypresses should only occur a printable character is hit |
dojo/_base/kernel | extend-dojo | Defined Dojo modules should push their definitions into the dojo object. In 2.0,it will likely be unusual to augment another object as a result of defining a module. This has feature gives a way to force 2.0 behavior as the code is migrated. |
dojo/_base/kernel | dojo-guarantee-console | Ensure that console.log,console.warn,etc. methods are defined |
dojo/_base/kernel | dojo-debug-messages | Log internal debug messages generated by Dojo,these include deprecated/experimental warnings along with parser auto-required module names. |
dojo/_base/kernel | dojo-modulePaths | Consume module paths defined in config.modulePaths. |
dojo/_base/kernel | dojo-moduleUrl | Expose dojo.moduleUrl method,returns a URL relative to a module. Deprecated in 2.0,should use require.toUrl() |
dojo/_base/lang | bug-for-in-skips-shadowed | Test for bug where the for-in iterator skips object properties that exist in Object’s prototype (IE6 - ?). |
dojo/_base/loader | dojo-fast-sync-require | All dojoRequireCallbacks can be released when all non-dojo/require!,dojo/loadInit! modules are either executed,not requested,or arrived. Potential weakness of this algorithm is that dojo/require will not execute callbacks untilall dependency trees are ready. |
dojo/_base/loader | config-publishRequireResult | Publish resolved module values,resulting from a require call,as JavaScript objects referenced by module identifiers in the global namespace. |
dojo/_base/window | quirks | Browser is running in Quirks-Mode |
dojo/dojo | host-node | 设置Dojo的运行环境在Nodejs平台 |
dojo/dojo | host-rhino | Dojo 的运行环境 on the Rhino 平台 |
dojo/dojo | dojo-xhr-factory | |
dojo/dojo | dojo-force-activex-xhr | Force XHR provider to use ActiveX API (MSXMLHTTP). |
dojo/dojo | native-xhr | Browser has native XHR API,XMLHttpRequest. |
dojo/dojo | dojo-gettext-api | Dojo provides API for retrieving text resource contents from a URL. |
dojo/dojo | dojo-loader-eval-hint-url | Module location should be used as source hint during eval rather than module identifier. |
dojo/dojo | ie-event-behavior | Browser supports legacy IE event behavIoUr API (attachEvent versus attachEventListener). |
dojo/has | host-browser | Dojo 运行在浏览器平台 |
dojo/has | dom | 当前平台支持 DOM |
dojo/has | dojo-dom-ready-api | 当前平台上支持 DOMReady API,当DOM加载完时,会通知一个监听器,代码在dojo.js |
dojo/has | dojo-sniff | 允许扫描dojo.js 角本中的 data-dojo-config 和 djConfig 标签 |
dojo/has | dom-addeventlistener | Standard DOM event API (addEventListener) supported on the current platform. |
dojo/has | touch | Touch events are supported on the current platform |
dojo/has | device-width | Amount of horizontal space in pixels available on the window |
dojo/has | dom-attributes-explicit | DOM node attributes array only lists explicitly user specified attributes,(W3C standard) |
dojo/has | dom-attributes-specified-flag | DOM node attribute values provide specified flag to skip attributes user didn’t specify,(IE8) |
dojo/hccss | highcontrast | Browser is in ‘high-contrast’ mode |
dojo/i18n | dojo-preload-i18n-Api | Define the preload localizations machinery,allow loading of special rollup modules which contain one or more flattened,localized bundles. |
dojo/i18n | dojo-v1x-i18n-Api | Define legacy (v1.x) i18n functions |
dojo/json | json-parse | Platform supports parsing JSON text to JavaScript objects through native API |
dojo/json | json-stringify | Platform supports ‘stringify’ method on native JSON API,allowing serialisation of JavaScript objects to JSON text. |
dojo/mouse | dom-quirks | Browser is running in Quirks-Mode |
dojo/mouse | events-mouseenter | Browser supports the onmouseenter DOM event |
dojo/mouse | events-mousewheel | Browser supports the onmousewheel DOM event |
dojo/on | jscript | JavaScript environment provided by the JScript platform,dialect of ECMAScript standard that is used in Microsoft’s Internet Explorer. |
dojo/on | event-orientationchange | Browser supports the orientationchange DOM event,used to detect orientation changes in the target device. |
dojo/on | event-stopimmediatepropagation | Browser supports the stopImmediatePropagation method on DOM events,used to prevent other event listeners being called. |
dojo/query | array-extensible | Native array implementation supports manual extension (not supported in older versions of IE). |
dojo/ready | dojo-config-addOnLoad | Consume addOnLoad configuration property. |
dojo/request/handlers | activex | Browser platform has ActiveX API methods,provided by Internet Explorer |
dojo/request/script | script-readystatechange | DOM supports onreadystatechange event,fired when document.readyState changes |
dojo/request/xhr | native-xhr | Browser has native XHR API,XMLHttpRequest |
dojo/request/xhr | dojo-force-activex-xhr | Force XHR provider to use ActiveX API (MSXMLHTTP). |
dojo/request/xhr | native-xhr2 | Browser’s native XHR implementation supports XHR Level 2 API |
dojo/request/xhr | native-formdata | Browser has a native FormData implementation,letting user compile set of key/value pairs to send using XMLHttpRequest |
dojo/selector/_loader | dom-qsa2.1 | Browser supports the DOM QuerySelectorAll method available,with Level 2.1 CSS selectors |
dojo/selector/_loader | dom-qsa3 | Browser supports DOM QuerySelectorAll method,with Level 3 CSS selectors |
dojo/selector/lite | dom-matches-selector | Browser supports the matchesSelector method for testing selector queries directly against DOM nodes.dojo/selector/lite,dom-qsa,Browsers supports the DOM QuerySelectorAll method.” |
dojo/sniff | air | Environment is running on the Adobe Air platform |
dojo/sniff | khtml | Environment is running on the Konqueror-based platform |
dojo/sniff | webkit | Environment is running on the WebKit rendering engine platform |
dojo/sniff | chrome | Environment is running on the Chrome browser platform |
dojo/sniff | safari | Environment is running on the Safari browser platform |
dojo/sniff | mac | Environment is running on the Mac OS X platform |
dojo/sniff | quirks | Browser is running in Quirks-Mode |
dojo/sniff | ios | Environment is running on the iOS mobile operating system |
dojo/sniff | android | Environment is running on the Android mobile operating system |
dojo/sniff | opera | Environment is running on the Opera browser platform |
dojo/sniff | mozilla | Environment is running on the Mozilla browser platform |
dojo/sniff | ff | Environment is running on the Firefox browser platform |
dojo/sniff | ie | Environment is running on the Microsoft Internet Explorer browser platform |
dojo/sniff | wii | Environment is running on the Nintendo Wii browser platform |
dijt/BackgroundIframe | config-bgIframe | Flag to create background iframe behind popups like Menus and Dialog. A background iframe prevents problems with popups appearing behind applets/pdf viewers,and also prevents the bleed through select problem on IE6 and IE7. |
dijit/_WidgetBase | dijit-legacy-requires | Make dijit load modules the application didn’t explicitly require,e.g. dijit/_base/manager,backwards compatibility in non-async mode. |
dijit/form/_ExpandingTextAreaMixin | textarea-needs-help-shrinking | Browser platform’s <textarea> element needs manual help to shrink as content changes. |
dojox/form/uploader/Base | FormData | Browser has a native FormData implementation,letting user compile set of key/value pairs to send using XMLHttpRequest |
dojox/form/uploader/Base | xhr-sendAsBinary | Browser’s native XHR implementation supports the sendAsBinary method,for sending binary data over XHR. |
dojox/form/uploader/Base | file-multiple | Browser supports file input DOM element with multiple file selection attribute,allowing user to select more than one file. |
dojox/mobile/Audio | mobile-embed-audio-video-support | Platform supports creating embed tags with audio and video elements. |
dojox/mobile/common | mblAndroidWorkaround | Test for Android 2.X transition animation flicker issue |
dojox/mobile/common | mblAndroid3Workaround | Test for Android 3.X transition animation flicker issue |
dojox/mobile/scrollable | translate3d | Browser supports the WebKit-specific CSS transform property,translate3d. |
dojox/mobile/sniff | bb | Environment is running on the RIM Blackberry mobile browser platform |
dojox/mobile/sniff | android | Environment is running on the Android mobile browser platform |
dojox/mobile/sniff | iphone | Environment is running on the iPhone mobile browser platform |
dojox/mobile/sniff | touch | Touch events are supported on the current platform |
dojox/mvc/_InlineTemplateMixin | dom-qsa | Browser supports the DOM QuerySelectorAll method |
dojox/mvc/parserExtension | dom-qsa | Browser supports the DOM QuerySelectorAll method |
dojox/mvc/parserExtension | dojo-parser | Browser has loaded the dojo/parser module |
dojox/mvc/parserExtension | dojo-mobile-parser | Browser has loaded the dojox/mobile/parser module |
dojox/mvc/sync | mvc-bindings-log-api | Enable debugging messages for MVC module. |