JavaScript嗅探执行神器-sniffer.js,你值得拥有!

时间:2023-03-09 15:32:26
JavaScript嗅探执行神器-sniffer.js,你值得拥有!

一、热身——先看实战代码

a.js 文件

// 定义Wall及内部方法
;(function(window, FUNC, undefined){
var name = 'wall'; Wall.say = function(name){
console.log('I\'m '+ name +' !');
}; Wall.message = {
getName : function(){
return name;
},
setName : function(firstName, secondName){
name = firstName+'-'+secondName;
}
};
})(window, window.Wall || (window.Wall = {}));

index.jsp文件

<script type='text/javascript'>
<%
// Java 代码直出 js
out.print("Sniffer.run({'base':window,'name':'Wall.say','subscribe':true}, 'wall');\n");
%> // Lab.js是一个文件加载工具
// 依赖的a.js加载完毕后,则可执行缓存的js方法
$LAB.script("a.js").wait(function(){
// 触发已订阅的方法
Sniffer.trigger({
'base':window,
'name':'Wall.say'
});
});
</script>

这样,不管a.js文件多大,Wall.say('wall')都可以等到文件真正加载完后,再执行。

二、工具简介

// 执行 Wall.message.setName('wang', 'wall');
Sniffer.run({
'base':Wall,
'name':'message.setName',
'subscribe':true
}, 'wang', 'wall');

看这个执行代码,你也许会感觉困惑-什么鬼!