美文网首页
JavaScript设计模式 | 11-代理模式

JavaScript设计模式 | 11-代理模式

作者: 夏海峰 | 来源:发表于2018-08-20 14:10 被阅读8次

1、模式定义

代理模式,当一个对象不能直接引用另一个对象时,此时就需要通过代理对象在这两个对象之间起到中介作用。代理模式,在解决跨域问题时应用较为广泛。

2、代理模式 举例之 站长统计

// 代理模式之 站长统计
var Count = (function(){
    var _img = new Image();
    return function(param){
        var str = 'http://www.count.com/a.gif?';
        for(var i in param){
            str += i + '=' + param[i];
        }
        _img.src = str;
    }
})();

// 测试用例
Count({num:10});

3、代理模式 举例之 JSONP

// 代理模式之 jsonp
function jsonpCallBack(res,req){
    console.log(res,req);
}

<script src='http://localhost/jsonp.php?callback=jsonpCallBack&data=getJsonpData'></script>
// 服务端配置
<?php
    $data = $_GET['jsonpCallBack'];
    $callback = $_GET['getJsonpData'];
    echo $callback.$data;
?>

4、代理模式 举例之 代理模板

// X域中被代理的页面A
function callback(data){
    console.log('成功接收数据',data);
}

<iframe src="" name="proxyIframe"></iframe>
<form action="proxy.php" method="post" target="proxyIframe">
    <input type="text" name="callback" value="callback">
    <input type="text" name="proxy" value="http://localhost:8080/proxy.html">
    <input type="submit" value="submit">
</form>
// X域中代理页面B
window.onload = function(){
    if(top == self) return;
    var arr = location.search.substr(1).split('&');
    var fn, args;
    for(var i=0, len=arr.length, item; i<len; i++){
        item = arr[i].split('=');
        if(item[0] == 'callback'){
            fn = item[1];
        }else if(item[0] == 'arg'){
            args = item[1];
        }
    }
    try {
        eval('top.'+fn+'("'+args+'")');
    }catch(e){
        console.log(e);
    };
}
// 在Y域中配置请求解析逻辑和Header
<?php
    $proxy = $_POST['proxy'];
    $callback = $_POST['callback'];
    header('Location:'.$proxy.'?callback='.$callback.'&arg=success');
?>

5、小结

本章主要讲解了JavaScript中,运用代理模式解决跨域问题的相关知识。代理对象可以完全解决被代理对象和外界对象之间的耦合关系。同时,对被代理的对象来讲,这种代理模式也是对自身的一种保护。从服务器的角度看,这又是一种远程代理。


完!!!

相关文章

  • JavaScript设计模式 | 11-代理模式

    1、模式定义 代理模式,当一个对象不能直接引用另一个对象时,此时就需要通过代理对象在这两个对象之间起到中介作用。代...

  • JavaScript设计模式四(代理模式)

    JavaScript设计模式四(代理模式) 代理模式的定义: 代理模式是为一个对象提供一个代用品或者占位符,以便对...

  • Javascript设计模式-代理模式

    特点 1.使用者无法直接访问目标对象 2.使用者和目标对象之间加一层代理,通过代理来授权和控制 例如:访问gith...

  • JavaScript设计模式——代理模式

    代理模式 代理的概念 由于一个对象不能直接引用另一个对象,所以需要通过代理对象在这两个对象之间起到中介的作用 以上...

  • JavaScript设计模式——代理模式

    代理模式属于设计模式中结构型的设计模式; 定义:顾名思义就是为一个对象提供一个代用品或占位符,以便控制对它的访问!...

  • JavaScript设计模式——代理模式

    代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。 代理模式是一种非常有意义的模式,在生活中可以找到...

  • JavaScript设计模式--代理模式

    一、定义 代理模式:为一个对象提供一个代用品或占位符,以便控制对它的访问。代理分为:保护代理和虚拟代理保护代理:用...

  • 设计模式系列笔记-代理模式

    写在前面:本系列文章内容为《JavaScript设计模式与开发实践》一书学习笔记,感谢作者曾探 代理模式 代理模式...

  • Javascript单例模式概念与实例

    前言 和其他编程语言一样,Javascript同样拥有着很多种设计模式,比如单例模式、代理模式、观察者模式等,熟练...

  • [记录]我的设计模式学习路径

    书单 《JavaScript 设计模式与开发实践》《设计模式之美》《掘金小册-JavaScript 设计模式核⼼原...

网友评论

      本文标题:JavaScript设计模式 | 11-代理模式

      本文链接:https://www.haomeiwen.com/subject/nbfliftx.html