전방 크로스 해결 방법의 window.name+iframe

2111 단어 기술 공유
window.Thomas Frank 전송 기술은 원래 Thomas Frank가 쿠키의 일부 열세(도메인 이름당 4x20 Kb의 제한, 데이터는 문자열, 설정과 획득의 복잡한 등)를 해결하기 위해 발명한 것이다(원문 참조:). 나중에 Kris Zyp는 이 방법을 바탕으로 window를 강화했다.도메인 간 데이터 전송 문제를 해결하기 위해 Dojo (dojox.io.windowName) 를 도입했습니다.
우선, 우리는 윈도에 관해 알아야 한다.name의 이러한 기능: name 값은 서로 다른 페이지 (심지어 다른 도메인 이름) 에 불러온 후에도 존재하며, 매우 긴name 값 (2MB) 을 지원합니다.다시 말하면name 속성은 페이지의 URL 변화에 따라 달라지지 않으며, 이것은 전역에 기회를 제공한다.
우리는 원본 페이지에서 iframe 탭을 이용하여 요청할 목표 페이지를 끼워 넣고 목표 페이지에 window를 설정할 수 있습니다.요청한 정보를 window에 부여하는 속성.name.그러나 문제가 생겼다. 두 페이지가 서로 다른 영역에 있기 때문에 원본 페이지는 목표 페이지의name 값을 얻을 수 없다. 왜냐하면name 값은 같은 영역에 있는 페이지만 볼 수 있기 때문이다.이 때, 우리는 iframe을 원본 페이지와 같은 영역에 있는 에어로 되돌려야 한다.html 페이지(즉 빈 페이지, 여기서 중전의 역할을 충당)는 이때의name값이 변하지 않는다면 우리는 그것을 얻을 수 있다.
코드 예:
http://www.a.com/origin.html아래와 같다



	
	Document
	
		function getData ( url, fn ) {
			var oIframe = document.createElement('iframe'),
				firstBtn = true,
				loadFn = function () {
					if ( firstBtn ) {
						//        air.html,     name 
						oIframe.contentWindow.location = 'http://www.a.com/air.html';
						firstBtn = false;
					} else {
						fn( oIframe.contentWindow.name );
						oIframe.contentWindow.document.write('');
						oIframe.contentWindow.close();
						document.body.removeChild(oIframe);
						oIframe.src = '';
						oIframe = null;
					}
				};

			oIframe.src = url;

			//1.   iframe        ,  loadFn  ,  iframe   air.html
			//2.air.html           ,    loadFn  ,    else
			if ( oIframe.attachEvent ) {
				oIframe.attachEvent( 'onload', loadFn );
			} else {
				oIframe.onload = loadFn;
			}

			document.body.appendChild(oIframe);
		}


		//         getData       
		window.onload = function () {
			getData( 'http://www.b.com/target.html', function ( data ) {
				console.log( data );
			} );
		}
	




http://www.b.com/target.html다음과 같습니다.



	
	Document


	
		window.name = '       ';
	


참조 기사: window를 사용합니다.도메인 간 문제 해결name

좋은 웹페이지 즐겨찾기