JavaScript 의 크로스 필드 상세 설명 (원본 코드 첨부)
9177 단어 jsonp크로스 필드Ajaxhashwindow-nam
무엇이 크로스 필드 입 니까?
크로스 도 메 인 이란 서로 다른 도 메 인 이름 아래 에 데이터 상호작용 이 존재 하면 이 럴 때 크로스 도 메 인 문제 가 존재 한 다 는 것 이다. 여기 서 설명 하고 자 하 는 것 은 같은 사이트 의 서로 다른 폴 더 에서 의 데이터 상호작용 은 크로스 도 메 인 문제 가 존재 하지 않 는 다 는 것 이다.
어떤 상황 에서 크로스 필드 문제 가 존재 합 니까?
www.a.com 와 www.a.b.com 가 존재 합 니 다. ip 주 소 를 가리 키 더 라 도. ajax 은 XMLHttpRequest 이라는 대상 을 통 해 데이터 간 의 상호작용 을 하 는 것 이 고 XMLHttpRequest 안전 을 위해 크로스 도 메 인 상호작용 데 이 터 를 허용 하지 않 기 때문에 ajax 크로스 도 메 인 을 할 수 없다.크로스 필드 문제 의 몇 가지 해결 방식 은?
1.jsonp
무엇이
jsonp 입 니까? jsonp = json + padding (내 충전). 사실 그 는 내 충전 의 원 리 를 이용 하여 json 내 충전 의 물건 으로 한 상자 에 채 웠 습 니 다. 예 를 들 어 아래 와 같이 box{{name:"laowang"}};jsonp 한 가지 단점 은 단일 도 메 인 만 조작 할 수 있다 는 것 이다. 바로 우리 가 본 사 이 트 를 통 해 다른 사이트 의 데 이 터 를 수정 할 수 없다 는 것 이다.jsonp 을 사용 하여 도 메 인 을 넘 는 것 은 평소에 자주 사용 하 는 것 이다. script 라벨 의 형식 으로 script 라벨 은 도 메 인 을 넘 는 문제 가 존재 하지 않 고 우 리 는 이 를 jsonp 의 형식 이 라 고 통칭 한다.우 리 는
script 안에 있 는 src 을 요청 의 주소 로 사용 할 수 있 습 니 다. script 라벨 은 요청 js 파일 만 하 는 것 이 아니 라 요청 php 도 할 수 있 습 니 다. 이 페이지 가 연산 을 마치 고 돌아 온 결과 json 나 js 라면 문제 가 없 을 것 입 니 다.실례 1:
</head>
<body>
<script type="text/javascript"> //a.com </script>
<!-- b php , a src b ,a , b , , a b -->
<script type="text/javascript" src="b.php?key=value&key2=value2"></script>
</body> 실례 2:
(jsonp.html)
<body>
<script type="text/javascript"> //a.com // , box function box(json){ // a name alert(json.name); } </script>
<script type="text/javascript" src="1.jsonp.js"></script>
</body> (jsonp.js)
//b.com
// , b
// , 。
box({name : 'laowang'}); 효과 표시 | | 소스 코드
동적 생 성
jsonp(jsonp.html)
<script type="text/javascript"> function createJs(sUrl){ var oScript = document.createElement('script'); oScript.type = 'text/javascript'; oScript.src = sUrl; document.getElementsByTagName('head')[0].appendChild(oScript); } createJs('jsonp.js?callbcak=box'); // box jsonp box , , // , // // :?callbcak=box function box(json){ alert(json.name); } </script> (jsonp.js)
box({name : 'laowang'}); 효과 표시 | | 소스 코드
2.location.hash
location.hash 값 을 이용 하여 도 메 인 을 뛰 어 넘 을 수 있 습 니 다. 도 메 인 을 뛰 어 넘 는 것 은 요청 을 보 낸 다음 페이지 의 데 이 터 를 얻 는 것 일 뿐 입 니 다. iframe 를 통 해 도 메 인 을 뛰 어 넘 는 작업 을 할 수 있 습 니 다. 이 방법의 장점 은 도 메 인 작업 을 할 수 있다 는 것 입 니 다.원리: 예 를 들 어 내 가
location.hash 사이트 에 a 사 이 트 를 끼 워 넣 었 을 때 우 리 는 데 이 터 를 b 태그 로 도입 한 iframe 의 해시 값 에 추가 할 수 있다. 즉 script 해시 값 을 다 추가 한 후에 페이지 의 주 소 를 바 꾸 지 않 는 다. 그러면 데 이 터 를 php 사이트 에 가 져 갈 수 있다. 그리고 src="xxx.php#key1=value&key2=value2"사 이 트 는 데이터 에 따라 분석 하고 데 이 터 를 되 돌려 주 며 b 사 이 트 는 b 을 통 해 본 페이지 의 a 값 을 업데이트 할 수 있다. 이때 parent.location.hash 사 이 트 는 hash 사이트 의 데 이 터 를 얻 을 수 있다.그러나 이 방법 은 다른 도 메 인 아래 의 것 이다. 안전 을 위해 어떤 브 라 우 저 는 지원 하지 않 는 다. 예 를 들 어
a 와 b 우 리 는 다른 도 메 인 에서 그의 아버지 급 을 직접 찾 을 수 없다. 그러면 우 리 는 ie 사이트 의 페이지 에서 chrome 사이트 의 페이지 를 다시 만 들 수 있다.예 를 들 어 새로운 페이지
a 를 만 든 다음 에 그 도 a 사이트 의 데 이 터 를 yyy.html 사이트 의 a 페이지 에 추가 하고 번 호 를 추가 한 후에 우 리 는 a 사이트 에서 이 방법 yyy.html 을 통 해데 이 터 를 가 져 옵 니 다. 그들 은 현재 같은 도 메 인 아래 에 있 기 때문에 a 값 을 바 꾸 어 이 두 도 메 인 간 의 데이터 교 류 를 할 수 있 습 니 다.3.window.name
parent.location.hash = self.location.hash 로 도 메 인 을 뛰 어 넘 는 문 제 를 해결 할 수 있 습 니 다. 이것 은 비교적 안전 합 니 다. 내용 이 'window. name' 에 쓰 여 있어 서 노출 되 지 않 습 니 다.hash 대상 은 개 window.name 속성 이 있 습 니 다. 이 속성 은 하나의 창 window 의 수명 주기 에 창 이 불 러 온 모든 페이지 는 하나의 name 를 공유 하고 모든 페이지 는 읽 기와 쓰기 권한 이 있 습 니 다. (window) 는 한 창 이 불 러 온 모든 페이지 에 영구적 으로 존재 합 니 다.원리: 현재 두 개의 사이트 가 있 습 니 다. 이 두 사이트 아래 에 각각 한 페이지
window.name window.name 가 있 습 니 다. 그리고 우 리 는 window.name 사이트 의 www.a.com -->a1.html 아래 에 www.b.com -->b1.html 라벨 을 만 들 었 습 니 다. 그리고 a 지정 한 것 은 a1.html 사이트 데이터 iframe 페이지 입 니 다. 그리고 우 리 는 src 사이트 의 b 입 니 다.다음은 데 이 터 를 쓰 면 됩 니 다.다 쓴 후에
b1 를 불 러 온 후에 우 리 는 b 아래 에 b1.html window.name = ' '; 의 프 록 시 파일 을 만 들 었 습 니 다. a1 를 만 든 후에 프 록 시 파일 과 b1 는 공용 데이터 입 니 다. 이때 제 가 다시 요청 a1 할 때 프 록 시 를 통 해 데 이 터 를 찾 을 수 있 습 니 다.이것 과
www.b.com --> agent.html 의 원 리 는 차이 가 많 지 않 습 니 다. 모두 자신의 도 메 인 아래 에 현재 데이터 로 그 도 메 인 을 사용 할 프 록 시 파일 을 만 든 다음 에 프 록 시 와 현재 파일 이 같은 도 메 인 아래 에 있 는 원칙 을 통 해 데 이 터 를 제출 합 니 다.개인 적 으로
window.name 의 방법 은 복잡 하지 도 않 고 거의 모든 브 라 우 저 를 호 환 할 수 있다 고 생각 합 니 다. 이것 은 정말 좋 은 크로스 오 버 방법 입 니 다.4.document.domain
하위 영역 과 주 영역 사이 에 모두 설정
a1.html하위 영역 과 주 영역 hash 을 같은 주 영역 으로 설정 합 니 다. 전제조건: 이 두 도 메 인 은 같은 기본 도 메 인 에 속 해 야 합 니 다. 또한 사용 하 는 프로 토 콜 은 포트 가 일치 해 야 합 니 다. 그렇지 않 으 면 window.name 을 이용 하여 도 메 인 을 넘 을 수 없습니다.5. 서버 에이전트
서로 다른 도 메 인 이름 에서 서버 프 록 시 를 통 해 해결 합 니 다. 서버 프 록 시 는 서버 아래 에서 이 대상
document.domain = ' '; 의 프 록 시 파일 을 만 든 다음 에 서버 에서 연산 을 합 니 다. 그의 장점 은 원 하 는 데이터 상호작용 을 할 수 있다 는 것 입 니 다. 서버 의 압력 을 증가 시 키 는 것 이 단점 입 니 다.6.flash
document.domain 도 도 메 인 을 뛰 어 넘 는 문 제 를 해결 할 수 있다.7.postMessage
document.domain 는 XMLHttpRequest 방법 입 니 다. 관심 있 는 친구 들 은 직접 가서 볼 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[*기타*] 앱에서 외부 데이터 검색(JSONP편)앱에서 외부 서버의 데이터를 취하고 싶은 경우의 JSONP편. 일반적으로 다른 도메인에 대해 Ajax 통신을 시도하면 화가납니다. 이것을 크로스 도메인 제약이라고 한다. 그래도 외부 서버의 데이터를 가져오는 것이 필...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.