browser 模块
此模块的函数主要用于浏览器UA的判断。目前只提供了少量浏览器的UA判断,后续会增加。
NOTE: 除非遇到不可抗力,否则尽量不要使用UA判断,转而使用特征判断(详见detect
模块)
browser/android
字符串类型,表示当前安卓的版本号
var android = require('third/browser/android');
console.log('安卓版本:' + (android || '非安卓浏览器'));
browser/ie
字符串类型,表示当前IE浏览器的版本号
var android = require('third/browser/ie');
console.log('IE浏览器的版本号:' + (ie || '非IE浏览器'));
browser/isChrome
布尔值类型,表示是否是chrome浏览器
var isChrome = require('third/browser/isChrome');
console.log('是否是chrome浏览器:' + (isChrome || '非chrome浏览器'));
cookie 模块
此模块内的函数都是cookie操作相关的函数。
cookie/set
此函数用于设置指定名字的cookie值。
NOTE: 此函数需要与cookie/get
配套使用。因为为了区分设置在不同域名、不同路径下的同名cookie,set
函数在设置cookie时加入了一些额外标志位。如果直接通过document.cookie
获取的值就会包含这些额外标志位。
var set = require('third/cookie/set');
set('key', 'value');
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
key |
string |
cookie的名字 |
- |
- |
否 |
value |
string|number |
cookie的值 |
- |
- |
否 |
options |
Object= |
可选配置 |
- |
- |
否 |
options.context |
Window= |
指定需要设置cookie的window对象 |
默认为当前JS执行环境的window对象 |
- |
否 |
options.expires |
number= |
指定cookie多长时间后过期(微秒) |
- |
- |
否 |
options.domain |
string= |
指定设置cookie的域名 |
- |
- |
否 |
options.path |
string= |
指定设置cookie的路径 |
- |
- |
否 |
返回值
cookie/get
此函数用于获取指定名字的cookie值。
NOTE: 此函数需要与cookie/set
配套使用。因为为了区分设置在不同域名、不同路径下的同名cookie,set
函数在设置cookie时加入了一些额外标志位,get
函数则会自动删掉这些标志位。如果用get
函数去获取普通的cookie(非set
函数设置)则容易出现bug。
var set = require('third/cookie/set');
var get = require('third/cookie/get');
set('key', 'value');
console.log(get('key') === 'value');
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
key |
string |
cookie的名字 |
- |
- |
否 |
options |
Object= |
可选配置 |
- |
- |
否 |
options.context |
Window= |
指定需要设置cookie的window对象 |
默认为当前JS执行环境的window对象 |
- |
否 |
options.domain |
string= |
指定设置cookie的域名 |
- |
- |
否 |
options.path |
string= |
指定设置cookie的路径 |
- |
- |
否 |
返回值
类型 |
描述 |
string |
对应名字的cookie值 |
cookie/remove
此函数用于删除指定名字的。
var set = require('third/cookie/set');
var get = require('third/cookie/get');
var remove = require('third/cookie/remove');
set('key', 'value');
remove('key');
console.log(get('key') === 'value');
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
key |
string |
cookie的名字 |
- |
- |
否 |
options |
Object= |
可选配置 |
- |
- |
否 |
options.context |
Window= |
指定需要设置cookie的window对象 |
默认为当前JS执行环境的window对象 |
- |
否 |
options.domain |
string= |
指定设置cookie的域名 |
- |
- |
否 |
options.path |
string= |
指定设置cookie的路径 |
- |
- |
否 |
返回值
cookie/setRaw
此函数用于设置指定名字的cookie值,这里设置的是原始值。
NOTE: 此函数与cookie/set
不同点在于,setRaw
设置的是原始值,不会修改或添加任何标志位。
var setRaw = require('third/cookie/setRaw');
setRaw('key', 'value');
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
key |
string |
cookie的名字 |
- |
- |
否 |
value |
string|number |
cookie的值 |
- |
- |
否 |
options |
Object= |
可选配置 |
- |
- |
否 |
options.context |
Window= |
指定需要设置cookie的window对象 |
默认为当前JS执行环境的window对象 |
- |
否 |
options.expires |
number= |
指定cookie多长时间后过期(微秒) |
- |
- |
否 |
options.domain |
string= |
指定设置cookie的域名 |
- |
- |
否 |
options.path |
string= |
指定设置cookie的路径 |
- |
- |
否 |
返回值
cookie/getRaw
此函数用于获取指定名字的cookie原始值。
NOTE: 此函数与cookie/get
不同点在于:getRaw
获取的是原始值,不会判断cookie值来自哪个域名或路径。所以getRaw
得到的返回值是数组类型的。
var setRaw = require('third/cookie/setRaw');
var getRaw = require('third/cookie/getRaw');
setRaw('key', 'value', {
path: '/doc/test2'
});
setRaw('key', 'value2', {
path: '/doc/test1'
});
console.log(getRaw('key')[0] === 'value');
console.log(getRaw('key')[1] === 'value2');
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
key |
string |
cookie的名字 |
- |
- |
否 |
options |
Object= |
可选配置 |
- |
- |
否 |
options.context |
Window= |
指定需要设置cookie的window对象 |
默认为当前JS执行环境的window对象 |
- |
否 |
返回值
类型 |
描述 |
Array. |
对应名字的cookie值,可能是多个 |
cookie/setRootRaw
此函数用于设置指定名字的cookie值,并且自动设置到当前页面的根域名+根路径(/
)下。
var setRootRaw = require('third/cookie/setRootRaw');
setRootRaw('key', 'value');
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
key |
string |
cookie的名字 |
- |
- |
否 |
value |
string|number |
cookie的值 |
- |
- |
否 |
options |
Object= |
可选配置 |
- |
- |
否 |
options.context |
Window= |
指定需要设置cookie的window对象 |
默认为当前JS执行环境的window对象 |
- |
否 |
options.expires |
number= |
指定cookie多长时间后过期(微秒) |
- |
- |
否 |
options.extraBlackList |
Array.= |
指定设置cookie的域名 |
- |
- |
否 |
返回值
类型 |
描述 |
string |
如果设置成功则返回根域名,否则返回空字符串 |
detect 模块
此模块是特征检测模块。
detect/adBlock
此函数用于判断当前浏览器是否使用adBlock插件来屏蔽广告。
var adBlock = require('third/detect/adBlock');
console.log(adBlock());
返回值
类型 |
描述 |
boolean |
当前浏览器是否使用adBlock插件来屏蔽广告 |
detect/cookie
此函数用于判断浏览器是否支持cookie。
var cookie = require('third/detect/cookie');
console.log(cookie());
返回值
类型 |
描述 |
boolean |
当前浏览器是否支持cookie |
detect/cors
此函数用于判断浏览器是否支持跨域的请求。如果支持就会返回'xhr'或'xdr',否则返回空字符串。
xhr
表示浏览器支持XMLHttpRequest
对象的跨域
xdr
只会出现在IE9和IE8中,它们可以通过XDomainRequest
对象来实现跨域请求
var cors = require('third/detect/cors');
console.log(cors());
返回值
类型 |
描述 |
string |
当前浏览器是否支持跨域的请求,如果支持就会返回'xhr'或'xdr',否则返回空字符串 |
detect/flash
此函数用于检测当前浏览器的flash插件的版本号。
var flash = require('third/detect/flash');
console.log(flash());
返回值
类型 |
描述 |
string |
当前浏览器的flash插件的版本号 |
detect/inFrame
此函数用于判断当前JS的运行环境是否是在frame
或iframe
标签中。
var inFrame = require('third/detect/inFrame');
console.log(inFrame());
返回值
类型 |
描述 |
boolean |
当前JS的运行环境是否是在frame 或iframe 标签中 |
detect/isPrerender
此函数用于判断当前JS的运行环境是否是在预渲染过程中。
var isPrerender = require('third/detect/isPrerender');
console.log(isPrerender());
console.log(isPrerender(iframe.contentWindow));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
context |
Window |
JS的运行环境 |
当前的window 对象 |
- |
是 |
返回值
类型 |
描述 |
boolean |
当前JS的运行环境是否是在预渲染过程中 |
detect/isPreviewLoad
此函数用于判断当前JS的运行环境是否是在预览界面的渲染流程中。Safari浏览器有个Top site功能,它会展示最长访问的几个页面的截图。示例如下:

Safari会去真正的加载解析这几个站点页面,然后截图并保存。而当用户点开这些站点时则会再次重新加载解析这些页面。isPreviewLoad
函数则是用来判断当前的JS运行环境是否是在这个预览界面的截图流程中。
var isPreviewLoad = require('third/detect/isPreviewLoad');
console.log(isPrerender());
console.log(isPrerender(iframe.contentWindow));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
context |
Window |
JS的运行环境 |
当前的window 对象 |
- |
是 |
返回值
类型 |
描述 |
boolean |
当前JS的运行环境是否是在预览界面的渲染流程中 |
detect/localStorage
此函数用于判断当前浏览器是否支持localStorage
var localStorage = require('third/detect/localStorage');
console.log(localStorage());
返回值
类型 |
描述 |
boolean |
当前浏览器是否支持localStorage |
detect/sessionStorage
此函数用于判断当前浏览器是否支持sessionStorage
var sessionStorage = require('third/detect/sessionStorage');
console.log(sessionStorage());
返回值
类型 |
描述 |
boolean |
当前浏览器是否支持sessionStorage |
detect/postMessage
此函数用于判断当前浏览器是否支持postMessage
var postMessage = require('third/detect/postMessage');
console.log(postMessage());
返回值
类型 |
描述 |
boolean |
当前浏览器是否支持postMessage |
detect/sendBeacon
此函数用于判断当前浏览器是否支持sendBeacon
var sendBeacon = require('third/detect/sendBeacon');
console.log(sendBeacon());
返回值
类型 |
描述 |
boolean |
当前浏览器是否支持sendBeacon |
detect/touchEvents
此函数用于判断当前浏览器是否支持touch
事件
var touchEvents = require('third/detect/touchEvents');
console.log(touchEvents());
返回值
类型 |
描述 |
boolean |
当前浏览器是否支持touch 事件 |
dom 模块
此模块内的函数都是DOM操作相关的函数。
dom/attachIntoDOM
此函数用于把指定的DOM节点插入到DOM树中,但你不能指定它插入的位置。
NOTE: 此函数适用于将指定节点插入到DOM树中,但是不关心其位置的情况。它可以最大程度的确保DOM节点被安全的插入到DOM树中。这在第三方脚本的场景特别适用,因为开发者其实不确定DOM树的结构,甚至不能确定页面中是否有header
和body
标签。
更多信息可以参考这篇文章。
var attachIntoDOM = require('third/dom/attachIntoDOM');
console.log(attachIntoDOM(document.createElement('div')));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
element |
Element |
被插入的DOM节点 |
- |
- |
否 |
context |
window |
指定插入的目标节点树的window对象 |
当前JS运行环境的window对象 |
- |
是 |
dom/getPageHeight
此函数用于获取页面的高度。
var getPageHeight = require('third/dom/getPageHeight');
console.log(getPageHeight());
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
context |
window |
指定目标页面的window对象,可以是某个iframe内的window对象 |
当前JS运行环境的window对象 |
- |
是 |
返回值
dom/getPageWidth
此函数用于获取页面的宽度。
var getPageWidth = require('third/dom/getPageWidth');
console.log(getPageWidth());
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
context |
window |
指定目标页面的window对象,可以是某个iframe内的window对象 |
当前JS运行环境的window对象 |
- |
是 |
返回值
此函数用于获取页面可视区域左上角点的left
值(相对于页面左上角点)。
var getScrollLeft = require('third/dom/getScrollLeft');
console.log(getScrollLeft());
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
context |
window |
指定目标页面的window对象,可以是某个iframe内的window对象 |
当前JS运行环境的window对象 |
- |
是 |
返回值
类型 |
描述 |
number |
页面可视区域左上角点的left 值 |
此函数用于获取页面可视区域左上角点的top
值(相对于页面左上角点)。
var getScrollTop = require('third/dom/getScrollTop');
console.log(getScrollTop());
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
context |
window |
指定目标页面的window对象,可以是某个iframe内的window对象 |
当前JS运行环境的window对象 |
- |
是 |
返回值
类型 |
描述 |
number |
页面可视区域左上角点的top 值 |
dom/getViewHeight
此函数用于获取页面可视区域的高度。
var getViewHeight = require('third/dom/getViewHeight');
console.log(getViewHeight());
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
context |
window |
指定目标页面的window对象,可以是某个iframe内的window对象 |
当前JS运行环境的window对象 |
- |
是 |
返回值
dom/getViewWidth
此函数用于获取页面可视区域的宽度。
var getViewWidth = require('third/dom/getViewWidth');
console.log(getViewWidth());
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
context |
window |
指定目标页面的window对象,可以是某个iframe内的window对象 |
当前JS运行环境的window对象 |
- |
是 |
返回值
dom/getText
此函数用于获取指定节点内的文字,相当于node.textContent
但做了兼容处理。
var getText = require('third/dom/getText');
console.log(getText(document.getElementById('text')));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
element |
Element |
指定节点 |
- |
- |
否 |
返回值
event 模块
此模块内的函数都是DOM事件操作相关的函数。
event/domReady
此函数用于绑定document ready
事件。
var domReady = require('third/event/domReady');
function readyCallback() {
}
domReady(readyCallback, window);
domReady(readyCallback, document.getElementById('iframe').contentWindow);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
Function |
callback |
回调函数 |
- |
- |
否 |
context |
window |
指定的window对象 |
当前JS运行环境的window对象 |
- |
是 |
event/on
此函数用于绑定DOM事件。
var on = require('third/event/on');
on(document.body, 'click', function (e) {});
on(window, 'load', function (e) {});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
element |
Element|Window |
绑定事件的节点或window对象 |
- |
- |
否 |
event |
string |
事件名 |
- |
- |
否 |
function(Event) |
callback |
回调函数 |
- |
- |
否 |
返回值
类型 |
描述 |
Element|Window |
被绑定的节点或window对象 |
event/off
此函数用于取消DOM事件的绑定。
var off = require('third/event/off');
function callback(e) {
}
off(document.body, 'click', callback);
off(window, 'load');
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
element |
Element|Window |
需要被解绑的节点或window对象 |
- |
- |
否 |
event |
string |
事件名 |
- |
- |
否 |
function(Event)= |
callback |
回调函数 |
取消所有绑定的回调函数 |
- |
是 |
返回值
类型 |
描述 |
Element|Window |
解绑的节点或window对象 |
event/preventDefault
此函数用于阻止浏览器事件的默认行为,它兼容旧版本的IE(>=6)。
var on = require('third/event/on');
var preventDefault = require('third/event/preventDefault');
function callback(e) {
preventDefault(e);
}
on(document.body, 'click', callback);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
event |
Event |
事件对象 |
- |
- |
否 |
event/stopPropagation
此函数用于阻止浏览器事件的继续传播,它兼容旧版本的IE(>=6)。
var on = require('third/event/on');
var stopPropagation = require('third/event/stopPropagation');
function callback(e) {
stopPropagation(e);
}
on(document.body, 'click', callback);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
event |
Event |
事件对象 |
- |
- |
否 |
event/getTarget
此函数用于获取事件对象的目标节点,即target
值(此方法对旧版本的IE做了fallback处理)。
var on = require('third/event/on');
var getTarget = require('third/event/getTarget');
function callback(e) {
console.log(getTarget(e));
}
on(document.body, 'click', callback);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
event |
Event |
事件对象 |
- |
- |
否 |
返回值
类型 |
描述 |
Element |
事件对象的目标节点,即target 值 |
event/getKeyCode
此函数用于获取键盘事件的按键值。
var on = require('third/event/on');
var getKeyCode = require('third/event/getKeyCode');
function callback(e) {
console.log(getKeyCode(e));
}
on(document.body, 'keyup', callback);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
event |
Event |
事件对象 |
- |
- |
否 |
返回值
event/getPageX
此函数用于获取鼠标事件的点击位置距离页面左上角的水平距离。如果只想获取距离可视区域左上角的距离,则直接用event.clientX
。
var on = require('third/event/on');
var getPageX = require('third/event/getPageX');
function callback(e) {
console.log(getPageX(e));
console.log(e.clientX);
}
on(document.body, 'click', callback);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
event |
Event |
事件对象 |
- |
- |
否 |
返回值
类型 |
描述 |
number |
鼠标事件的点击位置距离页面左上角的水平距离 |
event/getPageY
此函数用于获取鼠标事件的点击位置距离页面左上角的垂直距离。如果只想获取距离可视区域左上角的距离,则直接用event.clientX
。
var on = require('third/event/on');
var getPageY = require('third/event/getPageY');
function callback(e) {
console.log(getPageY(e));
console.log(e.clientY);
}
on(document.body, 'click', callback);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
event |
Event |
事件对象 |
- |
- |
否 |
返回值
类型 |
描述 |
number |
鼠标事件的点击位置距离页面左上角的垂直距离 |
iframe模块
此模块内的函数都是iframe
标签相关的函数。在第三方JS SDK的开发中iframe
标签有非常强大的作用。它可以被用来展示不可信的第三方内容(同源策略);可以被用来创建一个沙盒,避免SDK代码与页面原有代码冲突;甚至可以被用来加载JS文件(不会block load事件)。所以我们单独抽出了一个iframe模块来存放相关方法。
iframe/createAnonymous
创建一个隐藏的iframe
标签,它对普通用户来说是不可见的,并且宽高为0。
NOTE: 新创建的iframe
节点并没有被插入到页面中去,而且在IE下直接获取其contentWindow
可能会出错。此方法一般需要和dom/attachIntoDOM
和iframe/ready
或者iframe/write
函数一起使用。
var createAnonymous = require('third/iframe/createAnonymous');
var write = require('third/iframe/write');
var attachIntoDOM = require('third/dom/attachIntoDOM');
var iframe = createAnonymous();
attachIntoDOM(iframe);
write(iframe, '<div>IMPORTANT MESSAGE!</div>', function () {});
返回值
类型 |
描述 |
Element |
新创建的iframe DOM节点 |
iframe/ready
此函数用于获取iframe(非跨域,必须已经在dom树中)节点内部的window和document对象。
NOTE: 在IE浏览器下,如果当前页面修改过document.domain
,那么即使是同域名的iframe节点,直接通过contentWindow
获取其window对象,也会报跨域的错误。为了解决这个问题,需要同时再设置iframe节点内的document.domain
为相同值。故这个方法并不是同步的,而是异步的。
var createAnonymous = require('third/iframe/createAnonymous');
var ready = require('third/iframe/ready');
var attachIntoDOM = require('third/dom/attachIntoDOM');
var iframe = createAnonymous();
attachIntoDOM(iframe);
ready(iframe, function (win, doc) {
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
element |
Element |
iframe节点,必须已经在dom树中 |
- |
- |
否 |
callback |
function(Window, Document, string) |
成功获取window和document对象后的回调函数。第三个参数为修改后的document.origin 值,如果没有修改则为空字符串 |
- |
- |
否 |
iframe/write
此函数用于修改iframe(非跨域,必须已经在dom树中)节点内部的HTML。
var createAnonymous = require('third/iframe/createAnonymous');
var write = require('third/iframe/write');
var attachIntoDOM = require('third/dom/attachIntoDOM');
var iframe = createAnonymous();
attachIntoDOM(iframe);
write(iframe, '<div>IMPORTANT MESSAGE!</div>', function (win, doc) {
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
element |
Element |
iframe节点,必须已经在dom树中 |
- |
- |
否 |
html |
string |
HTML字符串 |
- |
- |
否 |
callback |
function(Window, Document)= |
创建并加载完成之后的回调函数 |
- |
- |
否 |
iframe/createByHTML
此函数用于根据指定的HTML字符串创建一个隐藏的iframe(非跨域)节点,iframe节点会被自动插入到DOM树中(位置不确定)。
var createByHTML = require('third/iframe/createByHTML');
var iframe = createByHTML('<div>IMPORTANT MESSAGE!</div>', function (win, doc) {
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
html |
string |
HTML字符串 |
- |
- |
否 |
callback |
function(Window, Document)= |
创建并加载完成之后的回调函数 |
- |
- |
否 |
context |
Window= |
在指定的window对象中创建iframe节点 |
默认为当前JS的运行环境 |
- |
是 |
返回值
类型 |
描述 |
Element |
新创建的iframe DOM节点 |
iframe/createBySrc
此函数用于根据指定的页面地址创建一个隐藏的iframe(可能会跨域)节点,iframe节点会被自动插入到DOM树中(位置不确定)。
var createBySrc = require('third/iframe/createBySrc');
var iframe = createBySrc('http://example.com/iframe.html');
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
html |
string |
HTML字符串 |
- |
- |
否 |
context |
Window= |
在指定的window对象中创建iframe节点 |
默认为当前JS的运行环境 |
- |
是 |
返回值
类型 |
描述 |
Element |
新创建的iframe DOM节点 |
json 模块
此模块的函数都是JSON相关的操作,是对原生对象window.JSON
的polyfill。
json/parse
此函数用于把字符串解析成JSON对象。如果浏览器支持原生的window.JSON
,则会优先使用原生的方法。
var parse = require('third/json/parse');
console.log(parse('{"a": 1}').a);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
input |
string |
输入的字符串 |
- |
- |
否 |
返回值
类型 |
描述 |
Object|Array |
解析之后的JSON对象 |
lang 模块
此模块的函数都是对Javascript语言及其基本函数库的补充性功能。
lang/capitalize
此函数用于修改字符串,使其除了第一个字母以外其他全部小写,第一个字母大写。
var capitalize = require('third/lang/capitalize');
console.log(capitalize('aPPle'));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
input |
string |
输入字符串 |
- |
- |
否 |
返回值
lang/escapeHTML
此函数用于将输入字符串中的部分字符进行转义。一般用于对不可信的字符串做转移,然后在输出到DOM中,避免XSS问题。被转义的字符如下:
& => '&
< => '<
> => '>
" => '"
' => ''
使用例子如下:
var escapeHTML = require('third/lang/escapeHTML');
document.body.innerHTML = escapeHTML('user<span>name</span>');
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
input |
string |
输入字符串 |
- |
- |
否 |
返回值
lang/escapeReg
此函数用于将输入字符串中的部分字符进行转义。一般用于对不确定的字符串做转移,然后作为正则表达式的一部分使用。
var escapeReg = require('third/lang/escapeReg');
new RegExp('^\\s*' + escapeReg('[a]') + '=\\s*(.*?)\\s*$', 'g')
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
input |
string |
输入字符串 |
- |
- |
否 |
返回值
lang/type
此函数用于判断输入的参数是否是字符串
var type = require('third/lang/type');
console.log(type(true));
console.log(type(1));
console.log(type('string'));
console.log(type(function () {}));
console.log(type([]));
console.log(type(new Date()));
console.log(type(/a/));
console.log(type({}));
console.log(type(new Error()));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
input |
* |
输入参数 |
- |
- |
否 |
返回值
lang/isArray
此函数用于判断输入的参数是否是字符串
var isArray = require('third/lang/isArray');
console.log(isArray([1, 2, 3]));
console.log(isArray(new Array()));
console.log(isArray('1, 2, 3'));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
input |
* |
输入参数 |
- |
- |
否 |
返回值
lang/isObject
此函数用于判断输入的参数是否是Object类型的对象。
var isObject = require('third/lang/isObject');
console.log(isObject({}));
console.log(isObject(new Object()));
console.log(isObject(new Array()));
console.log(isObject(window));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
input |
* |
输入参数 |
- |
- |
否 |
返回值
类型 |
描述 |
boolean |
输出参数是否是Object类型的对象 |
lang/isWindow
此函数用于判断输入的参数是否是window
对象。
NOTE: 注意此函数只能用于判断已经挂载到页面上的window
对象。如果是新创建的iframe
标签,但尚未append到页面中,则此iframe
标签内的window
对象是不能通过此判断的。
var isWindow = require('third/lang/isWindow');
console.log(isWindow(window));
console.log(isWindow({}));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
input |
* |
输入参数 |
- |
- |
否 |
返回值
类型 |
描述 |
boolean |
输出参数是否是window 对象 |
lang/isNative
此函数用于判断输入的函数是否是浏览器原生的函数,而非由用户赋值的
NOTE: 此函数只能用于判断函数,不能用于判断是否是浏览器原生的对象,即host object
。例如:window.JSON
对象。
在IE<9之前的浏览器中,很多作为函数其实都是host object
。对这些函数调用isNative
方法就会出现浏览器的兼容性问题。例如:window.setTimeout
。
var isNative = require('third/lang/isNative');
console.log(isNative(window.encodeURIComponent));
window.encodeURIComponent = function () {};
console.log(isNative(window.encodeURIComponent));
console.log(isNative(JSON));
console.log(isNative(JSON.stringify));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
input |
* |
输入参数 |
- |
- |
否 |
返回值
类型 |
描述 |
boolean |
是否是浏览器原生的函数 |
lang/random
此函数用于生成一个随机数。
var random = require('third/lang/random');
console.log(random());
返回值
lang/randomId
此函数用于生成一个随机的字符串。这个id是random
函数随机生成的数字转换成36进制后的字符串。
var randomId = require('third/lang/randomId');
console.log(randomId());
返回值
lang/uuid
此函数用于生成一个随机的ID。ID由四组随机字符串通过连接符串起来的
var uuid = require('third/lang/uuid');
console.log(uuid());
console.log(uuid('_'));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
join |
string |
连接符 |
'.' |
- |
是 |
返回值
lang/toArray
此函数用于将近似数组的对象转换成真正的数组,一般用于处理函数参数、NodeList
等等。
var toArray = require('third/lang/toArray');
console.log(toArray(document.getElementsByTagName('p')));
console.log(toArray(arguments));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
input |
Object |
近似数组的对象 |
- |
- |
否 |
start |
number |
新数组由旧对象的那一项(包含)开始获取,从0开始,支持负数 |
0 |
- |
是 |
end |
number |
新数组由旧对象的那一项(不包含)结束获取 |
到结尾,即input.length 值 |
- |
是 |
返回值
main模块
此模块内的函数都是入口函数,使用Third.js一般从此模块开始。
run
此函数是Third.js的入口级函数。它处理了如下三种因素:
- 页面处于
previewLoad
的情况下不会执行回调函数
- 页面处于
prerender
的情况下是暂时不会执行回调函数,等页面可见时再执行
- 获取window对象的策略自动兼容了JS文件被
util/fif
函数加载时候的情况,使其可以拿到正确的window对象
var run = require('third/run');
run(function (win) {
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
main |
function(Window) |
回调函数 |
- |
- |
否 |
options |
Object= |
可选配置 |
- |
- |
是 |
options.context |
Window= |
指定window 对象,而非使用默认的策略 |
'z' |
- |
是 |
message 模块
此模块的函数主要用于跨域的父子iframe
通讯。在支持postMessage
方法的浏览器中使用postMessage
API。在不支持的旧浏览器(IE6,7)中使用window.navigator
共享的方法来实现类似功能。
一般消息接收方由两个参数决定:对应iframe
的window
对象,以及标识此window
对象的唯一标识名。window
对象用于postMessage
的调用,唯一标识名用于在IE6、7下在共享window.navigator
对象上区分不同的window
对象的回调函数。
NOTE:注意为了实现降级支持旧浏览器,此模块的函数不支持标签之间的通讯
message/listen
此函数用于监听消息。
var listen = require('third/message/listen');
listen('parent', window, function (data) {
console.log(typeof data.origin);
console.log(data.origin);
console.log(typeof data.message);
console.log(data.message);
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
channel |
string |
window 对象的唯一标识名 |
- |
- |
否 |
context |
window|Element |
iframe 的dom对象,或者window 对象 |
- |
- |
否 |
callback |
function(Object) |
收到消息之后的回调函数,参数值为Object 类型。包含message 和origin 两个参数,它们都是字符串类型 |
- |
- |
否 |
message/unlisten
此函数用于取消消息监听。
var unlisten = require('third/message/unlisten');
unlisten('parent', window);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
channel |
string |
window 对象的唯一标识名 |
- |
- |
否 |
context |
window|Element |
iframe 的dom对象,或者window 对象 |
- |
- |
否 |
callback |
function(Object)= |
收到消息之后的回调函数,参数值为Object 类型。包含message 和origin 两个参数,它们都是字符串类型 |
- |
- |
是 |
message/send
此函数用于发送消息。
var send = require('third/message/send');
send('parent', window.parent, 'message');
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
channel |
string |
window 对象的唯一标识名 |
- |
- |
否 |
context |
window|Element |
iframe 的dom对象,或者window 对象 |
- |
- |
否 |
callback |
function(Object)= |
收到消息之后的回调函数,参数值为Object 类型。包含message 和origin 两个参数,它们都是字符串类型 |
- |
- |
是 |
request 模块
此模块的函数主要用于跨域的前后端数据请求。目前提供了三种请求协议:ping
、jsonp
和submit
。他们的优缺点,及适用情况如下:
协议 |
优点 |
缺点 |
适用情况 |
ping |
很轻量,在页面关闭时也能发送数据 |
不能接收返回数据,不太适合发送大数据量 |
适合用于不关心返回数据的小数据量提交场景,例如鼠标点击监测数据的提交(类似Google Analytics) |
jsonp |
能接收返回数据 |
不太适合发送大数据量 |
适用于小数据量提交但有需要返回数据的场景,例如初始化配置的拉取 |
submit |
能接收返回数据,支持发送大数据量,包括图片上传 |
操作很重,相对来说消耗更多资源 |
适用于大数据量提交的场景,例如文件上传的情况 |
request/ping
向指定服务器地址发送ping请求,传输数据。如果你需要发送的数据量较轻,并且不在乎发送的返回结果,那么使用这个方法发送数据。ping请求会采用三种数据传输方法之一来发送数据:
- 图片方式的请求(创建一个
Image
实例,指定接口地址为Image
实例的src
值)
- 调用
navigator.sendBeacon
方法发送跨域请求
- 调用
XMLHttpRequest
对象发送跨域请求
var ping = require('third/request/ping');
ping('/api/ping', {
id: '0067ED',
data: [2, 3, 4]
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string |
请求地址 |
- |
- |
否 |
params |
Object|string|Array.<Object> |
请求参数 |
- |
- |
否 |
options |
Object |
可选配置 |
- |
- |
是 |
options.randomKey |
string |
当使用Image 实例来发送数据时,为避免缓存会自动添加一个随机串字段。randomKey 是随机串的字段名 |
'z' |
- |
是 |
options.transport |
string |
强制使用一种数据传输方法,默认会自动选择最优的一种 |
'auto' |
'img', 'xhr', 'beacon' |
是 |
options.callback |
function(Error=) |
发送的回调函数,如果失败会传一个Error 实例作为输入 |
- |
- |
是 |
返回值
类型 |
描述 |
boolean |
是否已发送(为true时不能代表发送成功,只能说明已尝试发送 |
request/unloadPing
unloadPing
与ping
方法的不同之处在于:unloadPing
是处理在页面关闭时候发送请求的方法,它是ping
方法的特殊变种。普通的ping请求在页面关闭时很容易发送失败,而它使用了特别的手段,确保请求可以更高概率的发送成功。
var unloadPing = require('third/request/unloadPing');
unloadPing('/api/ping', {
id: '0067ED',
data: [2, 3, 4]
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string |
请求地址 |
- |
- |
否 |
params |
Object|string|Array.<Object> |
请求参数 |
- |
- |
否 |
options |
Object |
可选配置 |
- |
- |
是 |
options.randomKey |
string |
当使用Image 实例来发送数据时,为避免缓存会自动添加一个随机串字段。randomKey 是随机串的字段名 |
'z' |
- |
是 |
request/jsonp
向指定服务器地址发起JSONP请求。
var jsonp = require('third/request/jsonp');
jsonp('/api/ping', function (error, data) {
if (error) {
return;
}
console.log(data);
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string |
请求地址 |
- |
- |
否 |
callback |
function(Error=, *) |
回调函数。如果请求出错,第一个参数为Error 实例,否则为null 。第二个参数为JSONP回调的返回数据 |
- |
- |
否 |
options |
Object |
可选配置 |
- |
- |
是 |
options.timeout |
number |
超时时间(以毫秒为单位) |
10000 |
- |
是 |
options.charset |
string |
script标签的编码格式 |
'utf-8' |
- |
是 |
options.query |
string |
指定回调函数名字的字段名 |
'callback' |
- |
是 |
options.parent |
Node |
script标签的父节点,如果你希望script标签插入到指定的节点下面,则可以使用这个参数 |
自动选择当前页面下的位置 |
- |
是 |
request/submit
向指定服务器地址发起跨域请求。如果你需要发送大量的数据,甚至发送图片,并且非常关心返回的数据,那么需要使用这个函数。submit请求一般会采用两种数据传输方法之一:
- 调用
XMLHttpRequest
对象发送跨域请求
- 使用
iframe
加form
表单来发起跨域请求
var submit = require('third/request/submit');
var data = {
id: '0067ED',
data: [1, 2, 3]
};
submit('/api/submit', data, function (error, data) {
if (error) {
return;
}
console.log(data);
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string |
请求地址 |
- |
- |
否 |
params |
Object|string|Array.<Object> |
请求参数 |
- |
- |
否 |
callback |
function(Error=, *) |
回调函数。如果请求出错,第一个参数为Error 实例,否则为null 。第二个参数为JSONP回调的返回数据 |
- |
- |
否 |
options |
Object |
可选配置 |
- |
- |
是 |
options.dataType |
string |
返回数据的类型 |
'json' |
'json', 'text' |
是 |
options.charset |
string |
采用iframe 加form 表单来发起跨域请求时,使用此参数来设置编码格式 |
'utf-8' |
- |
是 |
options.context |
window |
采用iframe 加form 表单来发起跨域请求时,使用此参数来设置iframe 标签所在的位置 |
JS所在的上下文环境中的window对象 |
- |
是 |
文件上传及表单提交
当需要上传文件时,传递给submit
函数的参数需要变成form
表单的node节点。
<form id="submitForm" method="post" enctype="multipart/form-data">
<input type="text" name="username" value="zmmbreeze"></input>
<input type="password" name="password" value="1234567"></input>
<input type="file" name="head"></input>
</form>
<script>
var submit = require('third/request/submit');
var submitForm = document.getElementById('submitForm');
var data = {
id: '0067ED',
data: [1, 2, 3]
};
submit(submitForm, function (error, data) {
if (error) {
return;
}
console.log(data);
});
</script>
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
form |
Element |
表单的DOM节点 |
- |
- |
否 |
callback |
function(Error=, *) |
回调函数。如果请求出错,第一个参数为Error 实例,否则为null 。第二个参数为JSONP回调的返回数据 |
- |
- |
否 |
options |
Object |
可选配置 |
- |
- |
是 |
options.dataType |
string |
返回数据的类型 |
'json' |
'json', 'text' |
是 |
options.charset |
string |
采用iframe 加form 表单来发起跨域请求时,使用此参数来设置编码格式 |
'utf-8' |
- |
是 |
options.context |
window |
采用iframe 加form 表单来发起跨域请求时,使用此参数来设置iframe 标签所在的位置 |
JS所在的上下文环境中的window对象 |
- |
是 |
sandbox模块
此模块内的函数都是沙盒相关的工具类函数,它们基本都使用了iframe模块下的函数。
sandbox/create
此函数用于创建沙盒,沙盒的本质是一个空的、隐藏的、非跨域iframe节点。
var create = require('third/sandbox/create');
window.encodeURIComponent = 'test';
create(function (win) {
console.log(win.encodeURIComponent !== 'test');
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
callback |
function(Window) |
- |
- |
否 |
|
context |
Window= |
在指定的window对象中创建iframe节点 |
默认为当前JS的运行环境 |
- |
是 |
返回值
类型 |
描述 |
Element |
新创建的iframe DOM节点 |
sandbox/global
此函数用于创建一个全局的沙盒,并且可以通过它获取此沙盒。尚未创建全局沙盒之前,函数默认返回的是JS当前执行环境的window对象。当函数传入一个回调函数时,会开始创建次全局沙盒实例。由于创建沙盒是异步的,故必须通过回调函数异步的获取沙盒实例。沙盒创建完成之后执行global()
便可以同步的获取沙盒实例。
NOTE: Third工具库内基本所有涉及到native API调用的函数,都会使用global()
函数来获取或调用native的API函数。这是为了避免浏览器的提供的native API被网页开发者重写。
var global = require('third/sandbox/global');
window.encodeURIComponent = 'test';
console.log(global() === window);
global(function (win) {
console.log(global() === win);
console.log(win.encodeURIComponent !== 'test');
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
callback |
function(Window)= |
全局沙盒创建成功之后的回调函数,参数为沙盒实例 |
- |
- |
否 |
context |
Window= |
在指定的window对象中创建沙盒相关的iframe节点 |
默认为当前JS的运行环境 |
- |
是 |
返回值
类型 |
描述 |
Window |
当输入不包含回调函数时,会返回全局的沙盒实例,或者context |
sandbox/eval
此函数用于创建沙盒,并在沙盒内部执行指定的JS。
var eval = require('third/sandbox/eval');
eval('window.test = 1;', function (win) {
console.log(win.test);
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
js |
string|Function |
JS字符串,或者是JS函数(不会保留JS的执行上下文) |
- |
- |
否 |
callback |
function(Window, Document) |
执行完JS之后的回调函数 |
- |
- |
否 |
charset |
string= |
指定JS文件的编码 |
'utf-8' |
- |
是 |
返回值
类型 |
描述 |
Element |
新创建的iframe DOM节点 |
sandbox/load
此函数用于创建沙盒,并在沙盒内部加载并执行指定的远程JS文件(单个或多个)。
var load = require('third/sandbox/load');
load('http://example.com/script.js', function (win, doc) {
console.log(win.test);
});
load(
[
'http://example.com/script2.js',
'http://example.com/script1.js'
],
function (win, doc) {
console.log(win.test);
},
'GBK'
);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
js |
string|Function |
JS字符串,或者是JS函数(不会保留JS的执行上下文) |
- |
- |
否 |
callback |
function(Window, Document) |
执行完JS之后的回调函数 |
- |
- |
否 |
charset |
string= |
指定JS文件的编码 |
'utf-8' |
- |
是 |
返回值
类型 |
描述 |
Element |
新创建的iframe DOM节点 |
url 模块
此模块的函数主要用于URL的解析和生成。
url/parse
此函数用于解析URL地址。
var parse = require('third/url/parse');
var url = parse('http://example.com:8000/books/12?type=music#hash');
console.log(url.protocol);
console.log(url.origin);
console.log(url.host);
console.log(url.hostname);
console.log(url.port);
console.log(url.pathname);
console.log(url.search);
console.log(url.href);
console.log(url.hash);
var url2 = parse('http://example.com/');
console.log(url2.origin);
console.log(url2.host);
console.log(url2.hostname);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string |
URL地址,可以是相对地址(相对于relativedUrl )也可以是绝对地址。 |
- |
- |
否 |
relativedUrl |
string= |
URL的相对地址 |
默认是当前浏览器地址 |
- |
是 |
返回值
类型 |
参数 |
描述 |
Object |
parsedUrl |
解析之后的URL地址 |
string |
parsedUrl.href |
全部地址 |
string |
parsedUrl.hash |
hash参数 |
string |
parsedUrl.protocol |
协议 |
string |
parsedUrl.search |
参数 |
string |
parsedUrl.pathname |
路径 |
string |
parsedUrl.port |
端口号 |
string |
parsedUrl.hostname |
域名 |
string |
parsedUrl.host |
域名 + 端口 ,如果端口号是对应协议的默认端口号则没有 |
string |
parsedUrl.origin |
协议 + '//' + 域名 + 端口 ,如果端口号是对应协议的默认端口号则没有 |
url/getQuery
此函数用于获取指定URL上指定参数名的搜索参数值。
var getQuery = require('third/url/getQuery');
var types = getQuery('?type=1&type=2#type=3', 'type');
console.log(types);
var team = getQuery('?team=%230067ED#type=3', 'team');
console.log(team);
var noname = getQuery('?team=%230067ED#type=3', 'noname');
console.log(noname);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string |
包含搜索参数的URL地址 |
- |
- |
否 |
key |
string |
参数名 |
- |
- |
否 |
返回值
类型 |
描述 |
string|Arrayy. |
搜索参数值,如果有多个则以数组形式返回,如果不存在则返回空字符串 |
url/getQuerys
此函数用于获取指定URL上的所有搜索参数值。
var getQuerys = require('third/url/getQuerys');
var querys = getQuerys('?team=%230067ED&type=1&type=2#type=3');
console.log(querys.team);
console.log(querys.type);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string |
包含搜索参数的URL地址 |
- |
- |
否 |
返回值
类型 |
描述 |
Object.<string, string |
Array.> |
url/getFirstQuery
此函数用于获取指定URL上的所有搜索参数值。
var getFirstQuery = require('third/url/getFirstQuery');
var firstType = getFirstQuery('?team=%230067ED&type=1&type=2#type=3', 'type');
console.log(firstType);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string |
包含搜索参数的URL地址 |
- |
- |
否 |
key |
string |
参数名 |
- |
- |
否 |
返回值
类型 |
描述 |
string |
第一个找到的指定参数名的搜索参数值,如果不存在则返回空字符串 |
url/hasQuery
此函数用于判断指定URL上是否包含了指定参数名的参数。
var hasQuery = require('third/url/hasQuery');
console.log(hasQuery('?team=%230067ED&type=1&type=2', 'type'));
console.log(hasQuery('?team=&type=1&type=2#type=3', 'team'));
console.log(hasQuery('?type=1&type=2#type=3', 'team'));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string |
包含搜索参数的URL地址 |
- |
- |
否 |
key |
string |
参数名 |
- |
- |
否 |
返回值
类型 |
描述 |
boolean |
第一个找到的指定参数名的搜索参数值 |
url/setQuery
此函数用于更新指定URL上的指定参数名的参数值。
var setQuery = require('third/url/setQuery');
var updatedUrl = setQuery('?team=%230067ED&type=1&type=2', 'type', 3);
console.log(updatedUrl);
updatedUrl = setQuery('?team=%230067ED&type=1&type=2', 'type', [3, 4]);
console.log(updatedUrl);
updatedUrl = setQuery('?team=%230067ED&type=1&type=2', 'type', '');
console.log(updatedUrl);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string |
URL地址 |
- |
- |
否 |
key |
string |
参数名 |
- |
- |
否 |
value |
string|Arrayy. |
搜索参数值,如果有多个则以数组提供 |
- |
- |
否 |
返回值
url/deleteQuery
此函数用于删除指定URL上的指定参数名的参数。
var deleteQuery = require('third/url/deleteQuery');
var updatedUrl = deleteQuery('?team=%230067ED&type=1&type=2', 'type');
console.log(updatedUrl);
updatedUrl = deleteQuery('?type=1&type=2', 'type');
console.log(updatedUrl);
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string |
URL地址 |
- |
- |
否 |
key |
string |
参数名 |
- |
- |
否 |
返回值
url/toQuery
此函数用于将Object
或Array
形式参数对象序列化成字符串形式的参数,一般在数据传输时调用。
NOTE:如果toQuery
方法的输入参数是Array
形式,则其值必须是{key:'参数名', value:'参数值'}
形式的对象。使用Array
的优势在于可以控制序列化后的参数顺序
NOTE:如果某个参数的值是数组,则会在生成的字符串形式中给参数名加上[]
后缀。此行为与jQuery.param
方法的行为保持一致.
var toQuery = require('third/url/toQuery');
console.log(toQuery({
team: '#0067ED',
members: ['michael', 'john', 'jerry']
}));
console.log(toQuery([
{
key: 'members',
value: ['michael', 'john', 'jerry']
},
{
key: 'team',
value: '#0067ED'
}
]));
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
params |
Object|Array.<Object> |
Object 或Array 形式的参数对象 |
- |
- |
否 |
返回值
util模块
此模块内的函数都是工具类型的函数。
util/fif
此函数实现了Friendly iframe(简称fif)方式的加载JS文件的方法。Friendly iframe是IAB(The Interactive Advertising Bureau)推荐的加载广告的方法。它一般有如下的特点:
- 创建一个iframe,它的和父页面是同域的,不会收到同源策略影响
- iframe内部有一个或多个script节点,它们会加载远程的JS文件
- iframe内部的JS环境中有一个全局变量
inDapIF
,它的值为true
- 被加载的远程JS文件需要从全局变量
inDapIF
此来判断当前加载它的方法是否是Friendly iframe(它们可能还需要兼容普通加载的方式)
NOTE: 使用Friendly iframe方式加载JS文件有一个巨大的优势,就是不会block页面的load事件。
var fif = require('third/util/fif');
fif('script.js', function (context, doc) {
});
fif(['script1.js', 'script2.js'], function (context, doc) {
});
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
url |
string|Array. |
单个或多个JS文件地址 |
- |
- |
否 |
callback |
function(Window, Document) |
回调函数,输入参数是iframe内的window和document对象 |
- |
- |
否 |
options |
Object= |
可选配置 |
- |
- |
是 |
options.fifMark |
string= |
替换inDapIF 的变量名 |
'inDapIF' |
- |
是 |
options.context |
Window= |
在指定的window对象中创建friendly iframe节点 |
默认为当前JS的运行环境 |
- |
是 |
返回值
类型 |
描述 |
Element |
新创建的iframe DOM节点 |
util/mqp
此函数实现了The Method Queue Pattern。
NOTE: 使用此范式的一个优点是即使SDK尚未被加载,也可以先调用SDK之后会提供的接口。作为命令的形式存到队列里面,等SDK真正加载完成之后再去执行。
假设我们按照如下形式提供SDK的接口:
var mqp = require('third/util/mqp');
(function () {
var ExportApi = {
ready(callback) {
},
send(message) {
console.log(message);
}
};
mqp('__mq', ExportApi);
})();
在外部调用时就可以采用如下的代码形式,可以看到push进数组的命令自身也是数组类型。它的第一项对应了ExportApi
(即代理API)的函数名。
<script>
__mq = __mq || [];
__mq.push(['send', 'message']);
__mq.push(function () {
});
</script>
<script src="exportApi.js" async></script>
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
targetName |
string |
接口名 |
- |
- |
否 |
proxy |
Object |
被代理的API接口 |
- |
- |
否 |
options |
Object= |
可选配置 |
- |
- |
是 |
options.ready |
string= |
替换ready 的属性名 |
'ready' |
- |
是 |
options.context |
Window= |
在指定的window对象中注入接口 |
- |
- |
是 |
options.callback |
function(Object, string, Object) |
调用代理API的处理函数 |
以数组第一项作为方法名去查找代理API对象并调用执行 |
- |
是 |
如果通过函数名来调用代理API的方式不能满足你的需求,则可以自定义options.callback
这个回调函数。样例如下:
var mqp = require('third/util/mqp');
(function () {
var ExportApi = {
ready(callback) {},
send(data) {
console.log(message);
},
event(data) {
console.log(message);
}
};
var WHITE_LIST = 'send,event'.split(',');
mqp('__mq', ExportApi, {
callback: function (proxy, method, params) {
if (!~WHITE_LIST.indexOf(method)) {
return;
}
proxy[method].apply(proxy, params);
}
});
})();
可以看到我们通过自定义options.callback
函数,实现了一个白名单列表,只有白名单内的方法名才能被执行。
<script>
__mq = __mq || [];
__mq.push(['send', 1, 2]);
__mq.push(['event', 1, 2]);
</script>
<script src="exportApi.js" async></script>
util/inherits
此函数实现了简易的类继承功能。
var inherits = require('third/util/inherits');
function Father(firstName) {
this.firstName = firstName;
this.lastName = 'zhou';
}
Father.prototype.myName = function () {
return this.firstName + this.lastName;
};
function Son(firstName) {
Son.superClass.constructor.call(this, firstName);
}
inherits(Son, Father);
console.log(new Son('mm').myName());
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
subClass |
Function |
子类的构造函数 |
- |
- |
否 |
superClass |
Function |
富类的构造函数 |
- |
- |
否 |
util/log
此函数对console.log
做了简单的封装,确保在浏览器不支持console.log
API的时候不会报错。同时也支持console.group
和console.groupEnd
方法。
NOTE: 此函数不应该在实际的生产环境中使用,建议仅用于一些特殊情况下的debug。
var log = require('third/util/log');
log.group('THIRD');
log('message');
log.groupEnd();
log
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
message |
string |
需要打印的字符串 |
- |
- |
否 |
log.group
函数的参数
参数名 |
类型 |
描述 |
默认值 |
可选值 |
是否可选 |
groupName |
string |
日志组的名字 |
- |
- |
否 |