利用iframe進行js跨域處理


function iframeform(url)        //創建form和iframe
{
    var object = this;
    object.time = new Date().getTime();
    object.form = $('<form action="'+url+'" target="iframe'+object.time+'" method="post" style="display:none;" id="form'+object.time+'" name="form'+object.time+'"></form>');
    //name 屬性必須
    object.addParameter = function(parameter,value)
    {
        $("<input type='hidden' />")
         .attr("name", parameter)
         .attr("value", value)
         .appendTo(object.form);
    }

    object.send = function()
    {
        var iframe = $('<iframe data-time="'+object.time+'" style="display:none;" id="iframe'+object.time+'" name="iframe'+object.time+'"></iframe>'); //name屬性是必須
        $( "body" ).append(iframe); 
        $( "body" ).append(object.form);
        object.form.submit();
        iframe.load(function(){  
                     $('#form'+$(this).data('time')).remove(); 
                     $(this).remove(); 
                      });
    }
}
/******************************/
/*
*用法
*/
  var PostData ={             //需要發送的數據
                          vid:$(this).data(vid),
                          msg:TMdata.msg,
                          time:timeformatted,
                          fontSize:TMdata.fontSize,
                          fontMode:TMdata.fontMode,
                          fontColor:TMdata.fontColor,
                          timestamp:timestamp()
                      };  

   var dummy = new iframeform('TM.html');
                    dummy.addParameter('vid',PostData.vid);
                    dummy.addParameter('msg',PostData.msg);
                    dummy.addParameter('time',PostData.time);
                    dummy.addParameter('fontSize',PostData.fontSize);
                    dummy.addParameter('fontMode',PostData.fontMode);
                    dummy.addParameter('fontColor',PostData.fontColor);
                   dummy.addParameter('timestamp',PostData.timestamp);
                    dummy.send();

原理:form可以跨域發送數據,通過將需要post的內容寫入type="hidden"的input中name,value,然后點擊提交,將form的action設置為目標服務器的url,target設置為iframe 的名稱,
iframe 要設置name屬性,最好和iframe的id同名;這樣就可以實現無刷新的跨域post了,但是由於瀏覽器防止重復提交的功能,所以如果直接提交到iframe的話,后面你刷新頁面的話,
瀏覽器就 會提示是否要重復提交,所以這里我們監聽iframe的load事件,當iframe成功load之后,就將iframe的src指向空白頁或移除iframe,從而瀏覽器認為已經跳轉到新頁面了,
刷新也就不會提示重復提交的彈出框了。這里我們還可以在iframe
load成功的時候,通過contenWindow屬性來獲取服務器的響應。

$("iframe").load(function(){
var doc = $(this).get(0).contentWindow||$(this).get(0).contentWindow; //用於獲取在iframe中響應的后台服務器數據
alert(doc.document.body.innerHTML); //彈出顯示iframe里面的內容
$(this).attr("src","about:blank");
$(this).get(0).onload = null;
});
參考:http://blog.sina.com.cn/s/blog_6940cab30101a1yj.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM