JavaScript跨域實現

來源:互聯網
上載者:User

JavaScript跨域實現
最近在做個上傳檔案的服務,其中包含一個上傳的web頁面。目的是想用戶端頁面嵌套這個web頁面,然後直接將檔案上傳到伺服器。   因為檔案不同所以需要儲存到的檔案夾名稱也不一樣,所以用戶端需要傳遞一個檔案夾名稱,告訴伺服器端要儲存的目標位置,這涉及到iframe的參數傳遞:ClientàServer 檔案上傳成功後伺服器端返迴文件名稱或者相關資訊到用戶端,以便進行其它操作。這又涉及到一次參數傳遞:Server->Client       以上算是這個上傳工具大的概要。但是我做的筆記主要是關於參數傳遞的問題。這裡我涉及到了JavaScript跨域問題,我的實現分兩種情況,同樣有兩種方式實現(網上有很多關於跨域的執行個體和說明)         第一種情況: 主域相同,子域不同   例如:a.baidu.com和b.baidu.com   關鍵使用document.domain=”ceshi.com”語句,在用戶端頁面和伺服器端頁面都加上。 複製代碼1 document.domain = "ceshi.com"; //主域相同、子域不同時2 $("#mainFrame").load(function () {3             var clientHeight = $("#mainFrame").contents().find("body").height();4             var clientWidth = $("#mainFrame").contents().find("body").width();5             $(this).height(clientHeight);6             $(this).width(clientWidth);7             $("#mainFrame").contents().find("input[id=hiddenId]").val("100"); 8              //主域相同、子域不同時 傳遞一個參數id9         });複製代碼  第二種情況: 主域不相同,就是網域名稱不同   例如:www.baidu.com 和www.sohu.com   這種情況比較麻煩,我使用的是window.location.hash,用戶端需要加個代理頁面。  傳遞原理:用戶端首頁調用時使用#currentFolder=####傳遞參數   伺服器端頁面使用以下代碼接收並儲存到一個input Hidden中 複製代碼 1 //以下是主域不同時 2       var data = {}; 3         var hash_url; 4         function dealHash() { 5             hash_url = window.location.hash;//擷取到參數 6             var datas = hash_url.split("#")[1].split("&"); 7             for (var i = 0; i < datas.length; i++) { 8                 var t = datas[i].split("="); 9                 data[t[0]] = decodeURIComponent(t[1]);10             }11         }12 13         function change() {14             if (hash_url != window.location.hash) {15                 dealHash();16                 document.getElementById("FolderName").value = data["currentFolder"];17             }18         }複製代碼等上傳成功後再調用callback方法傳遞檔案名稱,這個正好和用戶端傳遞參數到服務端相反,只不過這個把資訊傳給了用戶端代理。這樣用戶端的代理頁面和首頁通訊更容易些。 1 function callback(data) {2             var iframe = document.getElementById("mainFrame");3             var url = "http://t.ceshi2.com/proxy.html?" + new Date().getTime();4             iframe.src = (url + "#filename=" + data);5         }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.