一个简易的 Sandbox,用来隔离不同的页面组件,使它们的执行互不干扰。使用 APM 安装:
apmjs install @searchfe/sandbox
其中 Fetch API 可能需要适当的 Polyfill:
- Sandbox
沙盒实例 创建后默认处于睡眠状态。需要调用
sandbox.run()
让它开始工作。- Window
沙盒上下文 提供给沙盒内的业务逻辑使用,相当于浏览器的 window。
- Document
沙盒文档 局部的 DOM 文档对象,托管了所有事件,页面属性等。
- Element
元素对象 这是 HTMLElement 的一个沙盒代理对象,封装并托管了 DOM 操作。
- IEventTarget
事件接口,用于托管全局事件。Window 和 Document 对象实现了该接口。 根元素以下的事件监听不予监听,见:#2
- IFetchAPI
Fetch API 的封装,见 https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API 具体实现取决于当前浏览器版本,以及当前环境的 Fetch Polyfill
- ITimeout
定时器接口,用于托管定时器。Window 对象使用了该接口。
事件接口,用于托管全局事件。Window 和 Document 对象实现了该接口。 根元素以下的事件监听不予监听,见:#2
Kind: global interface
Add an event listener to the hosted object
Kind: static method of IEventTarget
Param | Type | Description |
---|---|---|
event | String |
The event type |
cb | function |
The event listener |
useCapture | Boolean |
Whether or not use capture |
Remove an event listener to the hosted object
Kind: static method of IEventTarget
Param | Type | Description |
---|---|---|
event | String |
The event type |
cb | function |
The event listener |
useCapture | Boolean |
Whether or not use capture |
Fetch API 的封装,见 https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API 具体实现取决于当前浏览器版本,以及当前环境的 Fetch Polyfill
发起一个被沙盒托管的网络请求,API 请参考: https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
Kind: static method of IFetchAPI
Param | Type | Description |
---|---|---|
input | String |
目标 url |
init | function |
请求参数 |
定时器接口,用于托管定时器。Window 对象使用了该接口。
Kind: global interface
The setInterval() method repeatedly calls a function or executes a code snippet, with a fixed time delay between each call. It returns an interval ID which uniquely identifies the interval, so you can remove it later by calling clearInterval()
Kind: static method of ITimeout
Param | Type | Description |
---|---|---|
fn | function |
The scheduled callback |
timeout | Number |
Time inteval in millisecond |
移除定时器
Kind: static method of ITimeout
Param | Type | Description |
---|---|---|
id | Number |
定时器 ID,即 setInteval 的返回值 |
The setTimeout() method sets a timer which executes a function or specified piece of code once after the timer expires.
Kind: static method of ITimeout
Param | Type | Description |
---|---|---|
fn | function |
The scheduled callback |
timeout | Number |
Time in millisecond |
requestAnimationFrame() 是一个有 Polyfill 的 requestAnimationFrame(),相当于 16ms 的 timeout
Kind: static method of ITimeout
Param | Type | Description |
---|---|---|
fn | function |
The scheduled callback |
移除定时器
Kind: static method of ITimeout
Param | Type | Description |
---|---|---|
id | Number |
定时器 ID,即 setTimeout 的返回值 |
沙盒实例 创建后默认处于睡眠状态。需要调用 sandbox.run()
让它开始工作。
Kind: global class
创建后默认处于睡眠状态。需要调用 sandbox.run()
让它开始工作。
Param | Type | Description |
---|---|---|
element | function |
沙盒对应的 DOM 根元素 |
[context] | Object |
初始化作用域,会被合并到 sandbox.window |
Example
require(['@searchfe/sandbox'], function(Sandbox){
var sandbox = new Sandbox(document.querySelector('#app'))
sandbox.run();
sandbox.setInterval(() => console.log('timeout!'), 100)
setTimeout(function(){
sandbox.stop();
// sandbox.die();
}, 5000);
})
让沙盒开始工作,开始接管事件、定时器、以及网络回调。
Kind: instance method of Sandbox
停止沙盒,冻结定时器和网络回调、忽略事件。
Kind: instance method of Sandbox
如果在跑,就让它停;如果已停,就让它跑
Kind: instance method of Sandbox
杀死沙盒,销毁内部的定时器、网络、事件回调。一旦杀死不可重新开始工作。
Kind: instance method of Sandbox
Add a listener to the sandbox, available event types: run, stop, die
Kind: instance method of Sandbox
Param | Type | Description |
---|---|---|
type | string |
the event type |
cb | function |
the callback |
once | boolean |
execute only once |
Attach a handler to an event for the sandbox. The handler is executed at most once per event type.
Kind: instance method of Sandbox
Throws:
Error
event type not defined
Param | Type | Description |
---|---|---|
type | string |
the event type |
cb | function |
the callback |
Execute all handlers and behaviors attached to the sandbox for the given event type
Kind: instance method of Sandbox
Param | Type | Description |
---|---|---|
type | string |
the event type |
Remove a listener to the sandbox, available event types: run, stop, die
Kind: instance method of Sandbox
Throws:
Error
event type not defined
Param | Type | Description |
---|---|---|
type | string |
the event type |
cb | function |
the callback |
sandbox.spawn(child, [context]) ⇒ Sandbox
生成一个子沙盒对象,子沙盒会跟随父沙盒的生命周期。子沙盒会继承当前沙盒的状态,即: 如果当前沙盒处于 RUNNING 状态,子沙盒会立即执行。
Kind: instance method of Sandbox
Returns: Sandbox
- 子沙盒对象
Throws:
Error
沙盒已死Error
指定的节点是当前沙盒的祖先
Param | Type | Description |
---|---|---|
child | HTMLElement | string |
子 HTMLElement 或子元素选择符 |
[context] | Object |
子 HTMLElement 或子元素选择符 |
沙盒上下文 提供给沙盒内的业务逻辑使用,相当于浏览器的 window。
Kind: global class
Implements: IEventTarget
, ITimeout
, IFetchAPI
- Window
- new Window(element, sandbox)
- .document :
Document
- .location
- .pageXOffset :
Number
- .pageYOffset :
Number
- .innerHeight :
Number
- .outerHeight :
Number
- .innerWidth :
Number
- .outerWidth :
Number
创建一个沙盒上下文
Param | Type | Description |
---|---|---|
element | HTMLElement |
沙盒的根 DOM 元素 |
sandbox | Sandbox |
绑定到的沙盒对象 |
window.document : Document
沙盒的文档对象
Kind: instance property of Window
Location 对象的封装
Kind: instance property of Window
Kind: instance property of Window
Read only: true
Kind: instance property of Window
Read only: true
Kind: instance property of Window
Read only: true
Kind: instance property of Window
Read only: true
Kind: instance property of Window
Read only: true
Kind: instance property of Window
Read only: true
沙盒文档 局部的 DOM 文档对象,托管了所有事件,页面属性等。
Kind: global class
- Document
- new Document(element, sandbox)
- .querySelector :
function
- .querySelectorAll :
function
- .sandbox :
Sandbox
- .documentElement :
HTMLElement
- .scrollingElement :
Element
- .cookie :
Element
- .createElement :
Element
创建一个文档对象
Param | Type | Description |
---|---|---|
element | Element |
沙盒上下文 |
sandbox | Sandbox |
对应的沙盒对象 |
封装 querySelector
Kind: instance property of Document
Read only: true
封装 querySelectorAll,限制:返回值类型为 Array 而非 NodeList,这意味着返回列表不是 Live 的。
Kind: instance property of Document
Read only: true
document.sandbox : Sandbox
与当前文档绑定的沙盒对象
Kind: instance property of Document
Kind: instance property of Document
Read only: true
document.scrollingElement : Element
Kind: instance property of Document
Read only: true
document.cookie : Element
Kind: instance property of Document
Read only: true
document.createElement : Element
Kind: instance property of Document
Read only: true
元素对象 这是 HTMLElement 的一个沙盒代理对象,封装并托管了 DOM 操作。
Kind: global class
Implements: IEventTarget
- Element
- new Element(element)
- .scrollTo :
Document
- .offsetTop :
Number
- .offsetLeft :
Number
- .offsetHeight :
Number
- .offsetWidth :
Number
- .scrollHeight :
Number
- .scrollWidth :
Number
- .clientHeight :
Number
- .clientWidth :
Number
- .scrollTop :
Number
- .scrollLeft :
Number
创建一个元素对象
Param | Type | Description |
---|---|---|
element | HTMLElement |
HTML 元素对象 |
element.scrollTo : Document
Kind: instance property of Element
Kind: instance property of Element
Read only: true
Kind: instance property of Element
Read only: true
Kind: instance property of Element
Read only: true
Kind: instance property of Element
Read only: true
Kind: instance property of Element
Read only: true
Kind: instance property of Element
Read only: true
Kind: instance property of Element
Read only: true
Kind: instance property of Element
Read only: true
Kind: instance property of Element
Kind: instance property of Element
滚动窗口,见 https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo
Kind: global variable