前端跨域访问和传值

由于浏览器对跨域做了访问限制,所以无法访问跨域iframe下的document,尝试访问则会报“拒绝访问”等(不同浏览器提示不一样)

 

这里介绍一种跨域执行页面脚本的方法

1.域A下domA.html中 iframe加载域B下domB.html,并执行domB_Action方法。

2.domB.html页面上div[id=’bt’]调用domA_Action方法。

 

这样就实现了跨域交互,就是如果需要调用很多跨域方法,可以通过传方法名参数然后执行对应方法(未测试)

代码如下:

domA.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<script src="http://code.jquery.com/jquery-1.7.0.min.js"></script>
<title>域A</title>
<style>
#titleA{
    height:50px;
    background:yellow;
    font-size:20px;
    line-height:50px;
    text-align:center;
}

#frameA{
    height:500px;
    width:100%;
    margin:auto;
    border:1px solid red;
}
</style>
</head>
<body>

<div id="titleA">
</div>
<iframe src="http://192.168.3.232:8007/domB.html" width="100%" frameborder="0" id="frameA" name="frameA" scrolling="no"></iframe>
<iframe id="removeTarget" src="" style="display:none"></iframe>

<script type="text/javascript">
    $(function(){
        $("#frameA").load(function(){
            //通过hash在页面之间传值
            $("#removeTarget").attr("src",http://192.168.3.232:8007/domB_Action.html? + Math.random()+"#form_domA");
        });
    });
    
    
    function domA_Action(param){
        $("#titleA").html("DomA_Action 被执行了!\n 参数为:"+param);
    }
</script>

</body>
</html>

domA_Action.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 </head>
 <body>
     <script type="text/javascript">
        //接收参数
        var hash_url = window.location.hash;  
        var parm= hash_url.split("#")[1];     
        
        //注意层次
        parent.parent.window.domA_Action(parm);
    </script>
 </body>
</html>

 

domB.html

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<script src="http://code.jquery.com/jquery-1.7.0.min.js"></script>
<title>域B</title>
<style>
*{
    padding:0;
    margin:0;
}
body{
    height:500px;
}

#titleB{
    height:50px;
    background:gray;
    font-size:20px;
    line-height:50px;
    text-align:center;
}

#bt{
    height:50px;
    width:200px;
    font-size:20px;
    line-height:50px;
    text-align:center;
    cursor:pointer;
    margin:auto;
    background:burlywood;
}
</style>
</head>
<body>

<div id="titleB">
</div>

<div id="bt">调用DomA_Action</div>
<script>
    function domB_Action(param){
        $("#titleB").html("DomB_Action 被执行了!\n 参数为:"+param);
    };
    
    $(function(){
        $("#bt").click(function(){
            if($("#tempIframe").length<1)
                $("<iframe id=‘tempIframe‘></iframe>").appendTo("body").hide();
            $("#tempIframe").attr("src","http://127.0.0.1/test/domA_Action.html?" + Math.random() + "#from_domB");
        })
    });
</script>
</body>
</html>

 

domB_Action.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
 </head>
 <body>
     <script type="text/javascript"> 
        var hash_url = window.location.hash;  
        var parm= hash_url.split("#")[1]; 
        parent.window.frameA.domB_Action(parm);    
    </script>
 </body>
</html>

 

最终执行效果如下图

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。