精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
jQuery用iframe來解決跨域的簡單示例(1)

這篇文章主要為大家詳細介紹了jQuery用iframe來解決跨域的簡單示例(1),具有一定的參考價值,可以用來參考一下。

感興趣的小伙伴,下面一起跟隨512筆記的小編羅X來看看吧。
跨域的解決方案有許多種,就不一一介紹了,在這里主要總結一下用iframe來解決跨域的方法。

首先,說明一下window.name這個屬性,我們要用這個屬性來保存從服務器返回的數據。

window.name的值在同一瀏覽器窗口加載不同的頁面后依然存在。(比如在同一瀏覽器窗口下,先訪問頁面a.html,將window.name設定為”Hello World”,然后再訪問b.html,window.name仍然是”Hello World”。)
window.name最多可以支持2MB的值。
接下來結合代碼來說明這個解決方案。為了實現跨域訪問,當然要找到兩個不同的域,最簡單的,用http://localhost/和http://127.0.0.1/就可以了。新建一個client.html并假定其在http://localhost/這個域下面,用來向http://127.0.0.1/域下的頁面server.html發送異步請求。

下面是發送請求的代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
 * iframe來解決跨域
 *
 * @param
 * @arrange (512.筆記) www.512pic.com
 **/
var iframe1 = document.createElement("iframe");
iframe1.src = "http://127.0.0.1/server.html";
(function() {
  // 當iframe加載完之后觸發的函數
  function iframe1_load() {        
  }
  // 在IE下要用attachEvent來添加iframe的onload事件
  if(iframe1.attachEvent) {
    iframe1.attachEvent("onload", function(){
      iframe1_load();
    });
  }
  else {
    iframe1.onload = iframe1_load;
  }
})();
document.body.appendChild(iframe1);
注意這里的iframe1_load函數,它在iframe1完全加載完之后被瀏覽器調用,我們在這里取回從服務器返回的數據。上面說過,從服務器返回的數據應該是保存在window.name里的,改寫一下iframe1_load:
1
2
3
4
5
6
7
8
9
/**
 * iframe來解決跨域
 *
 * @param
 * @arrange (512.筆記) www.512pic.com
 **/
function iframe1_load() {
  alert(iframe1.contentWindow.name);
}
但由于同源策略的原因,上面的語句會報錯,因為iframe1訪問的頁面在http://127.0.0.1/這個域,而這上面的JavaScript所在的頁面是在http://localhost/,所以client.html暫時還不能訪問iframe1的大部分屬性。這個時候聰明的同學就能想到,如果把iframe1導航到http://localhost/下面的頁面不就可以訪問window.name了嗎?而且上面也說過window.name在換了頁面之后,還是存在的。

根據上面的分析,在http://localhost/下建一個新的頁面empty.html(不用往里添加代碼,只要保證不404就好。),在iframe1_load函數中先把iframe1導航到http://localhost/empty.html,然后再從iframe1的window.name里取數據。注意,iframe1導航到新頁面之后瀏覽器會再次調用iframe1_load,從而造成死循環,所以還要加個標記。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
 * iframe來解決跨域
 *
 * @param
 * @arrange (512.筆記) www.512pic.com
 **/
var iframe1 = document.createElement("iframe");
iframe1.style.display = "none";
document.body.appendChild(iframe1);
(function () {
    var same_domain = false;
    // 當iframe加載完之后觸發的函數
    function iframe1_load() {
        if (same_domain) {
            // 取得從服務器返回的數據
            alert(iframe1.contentWindow.name);
            // 關閉iframe1的窗口
            iframe1.contentWindow.close();
            // 移除iframe1
            document.body.removeChild(iframe1);
        } else {
            same_domain = true;
            // 不能用iframe1.src = "empty.html",在IE下有錯誤
            iframe1.contentWindow.location = "empty.html";
        }
    }
    // 在IE下要用attachEvent來添加iframe的onload處理函數
    if (iframe1.attachEvent) {
        iframe1.attachEvent("onload", function () {
            iframe1_load();
        });
    }
    else {
        iframe1.onload = iframe1_load;
    }
})();
iframe1.src = "http://127.0.0.1/server.html";
server.html的代碼
1
2
3
4
5
6
7
8
9
10
11
<!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>
  <title>Server</title>
  <script type="text/javascript">
    window.name = "HELLO WORLD";
  </script>
</head>
<body>
</body>
</html>

注:關于jQuery用iframe來解決跨域的簡單示例(1)的內容就先介紹到這里,更多相關文章的可以留意512筆記的其他信息。關鍵詞:iframe,跨域

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
判斷 iframe 是否加載完成的完美方法
jquery里判斷iFrame框架是否加載完成的三種方法
【翻譯】Iframe, onload 與 document.domain
JS DOMReady事件的六種實現方式
HTML5 postMessage
javaScript & jquery完美判斷圖片是否加載完畢
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 望江县| 大埔区| 瑞昌市| 美姑县| 岗巴县| 阿克陶县| 宜宾县| 高要市| 依兰县| 隆尧县| 靖西县| 靖宇县| 牙克石市| 彰化市| 白玉县| 葫芦岛市| 循化| 河间市| 香格里拉县| 顺义区| 安丘市| 弥渡县| 大安市| 余干县| 大渡口区| 赤峰市| 英山县| 天等县| 双江| 肇州县| 海宁市| 黎川县| 湖南省| 新竹县| 华坪县| 余庆县| 葵青区| 改则县| 奉新县| 铜山县| 鄯善县|