chrome跨域訪問
⑴ 說明跨域產生的原因是什麼
跨域請求存在的原因:由於瀏覽器的同源策略,即屬於不同域的頁面之間不能相互訪問各自的頁面內容。
跨域的方式
1.前端的方式: possMessage,window.name,document.domain,image.src(得不到數據返回),jsonP(script.src後台不配合得不到數據返回),style.href(得不到數據返回)
一.imge.src,script.src,style.href 不受同源策略的影響可以載入其他域的資源,可以用這個特性,向伺服器發送數據。最常用的就是使用image.src 向伺服器發送前端的錯誤信息。image.src 和style.href 是無法獲取伺服器的數據返回的,script.src 伺服器端配合可以得到數據返回。
二possMessage,window.name,document.domain 是兩個窗口直接相互傳遞數據。
(1)possMessage 是HTML5中新增的,使用限制是 必須獲得窗口的window 引用。IE8+支持,firefox,chrome,safair,opera支持
(2)window.name ,在一個頁面中打開另一個頁面時,window.name 是共享的,所以可以通過window.name 來傳遞數據,window.name的限制大小是2M,這個所有瀏覽器都支持,且沒有什麼限制。
3) document.domain 將兩個頁面的document.domain 設置成相同,document.domain 只能設置成父級域名,既可以訪問,使用限制:這頂級域名必須相同
2.純後端方式: CORS,伺服器代理
CORS 是w3c標準的方式,通過在web伺服器端設置:響應頭Access-Cntrol-Alow-Origin 來指定哪些域可以訪問本域的數據,ie8&9(XDomainRequest),10+,chrom4 ,firefox3.5,safair4,opera12支持這種方式。
伺服器代理,同源策略只存在瀏覽器端,通過伺服器轉發請求可以達到跨域請求的目的,劣勢:增加伺服器的負擔,且訪問速度慢。
3.前後端結合:JsonP
script.src 不受同源策略的限制,所以可以動態的創建script標簽,將要請求數據的域寫在src 中參數中附帶回調的方法,伺服器端返回回調函數的字元串,並帶參數。
⑵ 為什麼Mac下了chrome谷歌瀏覽器卻無法訪問網站
Mac下了chrome谷歌瀏覽器卻無法訪問網站的原因:
1、跨域訪問受阻
2、這個網站不同域名之間,未設置好允許訪問的白名單
3、系統性能問題
拓展相關解決方法:
1、跨域訪問受阻可以在Chrome瀏覽器中,按下F12,點擊開發者工具中的Console,進入控制台。
2、面向普通網站訪問者用戶是沒有辦法解決問題的,只能等待該網站做好相應改進,才能正常訪問網頁。面向網站開發人員的話可以在某域名下使用Ajax向另一個域名下的頁面請求數據,會遇到跨域問題。另一個域名必須在response中添加 Access-Control-Allow-Origin 的header,才能讓前者成功拿到數據。
3、清空緩存
4、重新安裝過一遍
⑶ js操作iframe的一些方法介紹
獲得iframe的window對象 存在跨域訪問限制
chrome iframeElement contentWindow firefox iframeElement contentWindow ie iframeElement contentWindow
文章Iframes onload and document domain中說「he iframe element object has a property called contentDocument that contains the iframe s document object so you can use the parentWindow property to retrieve the window object 」意思就是一些瀏覽器可以通過iframeElement contentDocument parentWindow獲得iframe的 window對象 但經過測試firefox chrome的element contentDocument對象沒有parentWindow屬性
(javascript)
復制代碼 代碼如下: function getIframeWindow(element){ return element contentWindow; //return element contentWindow || element contentDocument parentWindow; }獲得iframe的document對象 存在跨域訪問限制
chrome iframeElement contentDocument firefox iframeElement contentDocument ie element contentWindow document 備注 ie沒有iframeElement contentDocument屬性
(javascript)
復制代碼 代碼如下: var getIframeDocument = function(element) { return element contentDocument || element contentWindow document; };iframe中獲得父頁面的window對象 存在跨域訪問限制
父頁面 window parent 頂層頁面 window top 適用於所有瀏覽器
獲得iframe在父頁面中的標簽 存在跨域訪問限制
window frameElement(類型 HTMLElement) 適用於所有瀏覽器
iframe的onload事件 非ie瀏覽器都提供了onload事件 例如下面代碼在ie中是不會有彈出框的
(javascript)
復制代碼 代碼如下: var ifr = document createElement( iframe ); ifr src = ; ifr onload = function() { alert( loaded ); }; document body appendChild(ifr);但是ie卻又似乎提供了onload事件 下面兩種方法都會觸發onload
方法一
復制代碼 代碼如下: <iframe onload="alert( loaded );" src="方法二 //只有ie才支持為createElement傳遞這樣的參數
復制代碼 代碼如下: var ifr = document createElement( <iframe onload="alert( loaded );" src=" ); document body appendChild(ifr);由於iframe元素包含於父級頁面中 因此以上方法均不存在跨域問題
實際上IE提供了onload事件 但必須使用attachEvent進行綁定
復制代碼 代碼如下: var ifr = document createElement( iframe ); ifr src = ; if (ifr attachEvent) { ifr attachEvent( onload function(){ alert( loaded ); }); } else { ifr onload = function() { alert( loaded ); }; } document body appendChild(ifr);frames window frames可以取到頁面中的幀(iframe frame等) 需要注意的是取到的是window對象 而不是HTMLElement
復制代碼 代碼如下: lishixin/Article/program/Java/JSP/201311/19939