교차 도메인 JavaScript에는 두 가지 경우가 있습니다. 1. a.c.com 및 b.c.com과 같은 동일한 상위 도메인을 기반으로 하는 하위 도메인 간 2. www. a.com 및 www.b.com 3. 포트는 www.a.com:8080 및 www.a.com:8088과 같이 다릅니다. 4. http://www.a.com 및 https://www.a.com 3번과 4번의 경우에는 백그라운드 프록시를 통해 해결해야 합니다. a. 개시자의 도메인 아래에 프록시 프로그램을 생성합니다 b. 개시자의 js는 이 도메인에서 프록시 프로그램을 호출합니다 c. 프록시는 수신자에게 요청을 보내고 해당 데이터를 얻습니다 d. 이니시에이터의 js에 데이터를 가져옵니다 이니시에이터 페이지 코드는 다음과 같습니다.
System.Xml.Linq 사용, System.Net 사용, 네임스페이스 WebApplication1 사용, { // / /// $codebehindclassname$에 대한 요약 설명 // / [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Proxy : IHttpHandler { const int BUFFER_SIZE = 8 * 1024 public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string src = context.Request ["src"] WebRequest wr = WebRequest.Create(src) WebResponse wres = wr.GetResponse (); 인코딩 resEncoding = System.Text.Encoding.GetEncoding("gb2312") StreamReader sr = new StreamReader(wres.GetResponseStream(), resEncoding) string html = sr.ReadToEnd( ); sr.Close(); wres.Close(); context.Response.Write("
br/>"); context.Response.Write(html); } public bool IsReusable { get { return false; } } } }
백그라운드 프록시를 사용하는 것 외에도 상황 1과 2를 해결하는 7가지 방법이 있습니다. 1. 사례 1만 해결 가능): a. 개시자 페이지에서, 수신자 페이지에서 document.domain을 설정하고 값을 상위 도메인의 기본 도메인 이름(window.location.hostname)으로 설정합니다. b . 개시자 페이지에 숨겨진 iframe을 생성합니다. c. 브라우저에 따라 iframe.contentWindow.document 를 통해 수신자 페이지의 콘텐츠를 가져옵니다. d. 수신자 페이지에서 획득한 콘텐츠를 통해 수신자와 상호 작용 이 방법의 한 가지 단점은 한 도메인이 공격을 받으면 다른 도메인에 보안 허점이 나타난다는 것입니다.
a、发起方页면创建一个隐藏的iframe,并且源指向接收方页면 b、发起方页면통过iframe.contentWindow.opener = {a: function(params){...}, b: function (매개변수){...} ...}정의 사용 방법
c, 사용 방법 c, 사용 방법 >d, 接收方页면통로parent.opener = {c: function(params){...}, d: function(params){...} ...}정의법 >e, 发起方页置opener.c/opener.d来调用接收方定义象 其实原理就是重置opener对象 发起方页face代码如下