js跨域問題

2021-07-05 01:42:54 字數 1481 閱讀 7145

什麼是跨域?

概念:只要協議、網域名稱、埠有任何乙個不同,都被當作是不同的域。

1.document.domain(跨子域)

這個是範圍最小的乙個。

比如a.example.com 中寫了乙個iframe,其中src="example.com",但是因為是不同域的就無法寫js獲取iframe中的document等。

這時設定document.domain=「example.com」就可以了。

但document.domain的設定是有限制的,必須是本身或者比是本身的父域。

2.window.name

例如在a.com/yyy.html頁面要獲取b.com/***.html中的資料

function domaindata(url, fn)

else

};iframe.src = url;

if(iframe.attachevent) else

}domaindata('', function(data));

b.com/***.html中:

window.name = "要傳輸的資料"(可以是json,最大2m)

3.h5的window.postmessage(message,targetorigin)

4.jsonp

舉乙個jquery、node的例子

$.ajax(,

error: function()

});

node部分:

設個斷點發現jsonp的原理是動態插入script標籤,新增屬性src="跨域位址"。然後在url後邊加入乙個jsonpcallback=functionname,這樣後端就能識別出是jsonp請求,返回乙個函式名為functionname的函式,其中json以入參的形式放入函式中,只支援get請求

(其實jsonp的原理就是動態插入標籤而已,沒有使用xmlhttprequest)

5.cors

使用xmlhttprequest,get/post請求都支援。

原理是在伺服器端設定頭部如下:

}或者

res.writehead(200,);

瀏覽器檢測到這個頭部,就比較一下自己的網域名稱和頭部給的允許網域名稱是否一樣,一樣就允許訪問。

ok!!!

js跨域問題

報錯資訊 火狐上的錯誤 permission denied to access property document window.parent.document find database name val databasename 谷歌上的錯誤 uncaught securityerror blo...

js跨域問題

跨域問題,網上資料很多,但是太多複製貼上,還錯誤百出,這裡我總得說一下吧 第二個方法就是cros跨域,服務端要設定響應頭如下header access control allow credentials true header access control allow origin request....

js的跨域問題

網域名稱不同,埠不同 都是跨域。比如現在開啟的 是 a,在a 的js 中,要訪問 b的資源 那麼在b 服務端,要設定httpheader,允許在a 訪問b的資源,否則瀏覽器會不接收b 的資源。http請求是能達到b的,只是瀏覽器放棄了資料。access control allow origin ac...