WEB开发网
开发学院网页设计JavaScript js动态代理 阅读

js动态代理

 2010-09-14 13:46:37 来源:WEB开发网   
核心提示:最近公司的产品陆续跟其他网站有合作,麻烦的是每个网站都有个性化的需求,js动态代理,有的需要自己的logo,有的需要定制的广告,例如默认我们显示的是Google广告 http://www.wangchao.net.cn/bbsdetail_1950471.html但是此站需要专门显示旅游类广告 http://www.w

最近公司的产品陆续跟其他网站有合作,麻烦的是每个网站都有个性化的需求,有的需要自己的logo,有的需要定制的广告。

例如默认我们显示的是Google广告 http://www.wangchao.net.cn/bbsdetail_1950471.html

但是此站需要专门显示旅游类广告 http://www.wangchao.net.cn/bbsdetail_1950471.html

产品的UI相当复杂,hard code 当然是不能接受的。此时我很怀念我当年在.net用的Windsor,于是马上弄了个动态代理出来(对动态语言来说是小菜一碟),让我能给特定的宿主网站通过添加额外的js文件注入自己定制的代码

(function(){
    var interceptors = {};
    $.intercept = function(name, func){
        var parts = name.split('.');
        var owner = window;
        for (var i = 0; i < parts.length - 1; i++){
            owner = owner[parts[i]];
            if (!owner) break;
        }
        if (owner){
            var funcName = parts[parts.length - 1];
            var target = owner[funcName];
        }
        if (!(owner && target)){
            interceptors[name] = func;
            return;
        }
        owner[funcName] = function(){
            this.__invocation__ = target;
            func.apply(this, arguments)
        }
    }
    
    $._ = function(name, func, scope, args){
        var interceptor = interceptors[name];
        if (interceptor){
            scope = scope || window;
            scope.__invocation__ = func;
            return interceptor.apply(scope, args || []);
        }
        else {
            return func.apply(scope, args || []);
        }
    }
})()

1 2  下一页

Tags:js 动态 代理

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接