2010-08-16 7 views
1

iframe을 사용하여 위의 제목을 구현했지만 이전에는 더 이상 사용하고 싶지 않았습니다. 내 마음 속에 계획을 가지고 있습니다. 구현하기 위해 외부 페이지를 열어야합니다. 어떤 iframe을 사용하지 않고 asp.net 페이지 divage와 패널 및 다른 serverside componants와 간단한 aspx 페이지를 가지고, 난 그냥 iframe없이 어떻게 할 수 있는지 알고 싶어? 나는 새로운 복잡한 컨트롤을 디자인하고 싶지 않지만 나는 나를 위해 그것을 할 수있는 몇 가지 방법을 찾고있다.우리 페이지 내부에 외부 페이지 열기

iframe과 같은 외부 사이트에서로드되는 영역을 제어해야하지만 iframe은 iframe을 아약스로 처리 할 수 ​​없다는 것을 언급해야합니다. iframe을 업데이트 패널에 넣어도 페이지가 새로 고침되고 다시 게시됩니다. 반면 프로그래밍 방식으로 src 값을 변경하는 동안 (C# 코드에서) 우리는 다른 솔루션을 설계해야합니까?

요청을 만들어서 HTML로 만들 수 있다고 생각했지만 구현할 수 없었습니다.

+2

* Sidenote/Remark (의도적 인 의도 없음) : * 명시적인 허가가있는 페이지 또는 페이지에서만하시기 바랍니다. 그렇지 않으면 저작권 침해로 해석 될 수 있습니다 (또는 유사하지 않은 것 이외에). 그러면 문제가 발생할 것입니다. – Bobby

+1

HTML을 검색하여 div에 삽입하면 해당 사이트의 CSS가 외부 콘텐츠에 영향을 미칩니다. 원본 서버로 되돌아 가도록 절대 URL이 아닌 전체 URL (인라인 자바 스크립트/CSS 포함)을 다시 작성해야합니다. 많은 준비가 필요없는 새로운 콘텐츠는 스타일/레이아웃의 방식에서 다소 "공상적인"것도없이 매우 기본적인 것이 아니라면 원래 사이트와 같이 보이지 않을 것입니다. iframe을 사용하면 페이지 내에서 완전히 별개의 문서이므로 걱정할 필요가 없습니다. –

+0

내 호스트에는 보안 페이지가 없지만 외부는 다른 장소를 의미합니다. – kamiar3001

답변

4

당신은

  1. 은 서버 측에 WebRequest 클래스를 확인하고 HTML의 DIV의 텍스트 당신은 요청을 만들기 위해 보이지 않는 iframe이를 확인한 다음 HTML을 잡아 자바 스크립트를 사용할 수
  2. 을 반환 설정할 수 있습니다 iFrame에서 가져 와서 DIV에 넣습니다. (편집 : 설명이 작동하지 않는 것이 좋습니다)

일반적으로 크로스 사이트 스크립팅 문제로 인해 외부 웹 사이트에 전화를 걸 수 없습니다 (예 : XmlHttpRequest).

+0

iirc, 외부에서로드 된 HTML을 가져오고, iframe 여부와 상관없이 동일한 도메인에서 생성되지 않아 브라우저에서 존중하지 않으므로 빈 문자열. – Abel

+0

항목 1 당신은 너무 좋다고 말했지만 성능과 속도를 떨어 뜨릴 수 있습니다. webcontrol을 패널에로드하거나 C# 코드로 div를로드하는 것과 같은 페이지를로드 할 수 있습니까? – kamiar3001

+0

iframe을 사용하거나 서버에서 요청하지 않는 한 크로스 사이트 스크립팅을 제대로 수행 할 수 없습니다. 정상적인 방법으로 iframe을 사용하는 것이 잘못된 이유는 무엇을 위해 설계되었는지입니다. –

0

직접 요청, "iframe을 사용하지 않고 asp.net 페이지 내 외부 페이지 열기"은 설계 상으로는 불가능합니다.

당신은 AJAX를 언급합니다. AJAX를 사용하여 페이지를로드하고 헤더를 제거하거나 서버 측에서 <body> 태그를 <div> 태그로 바꿀 수 있습니다 (또는 서버 측에서도 가능). 이렇게하면 원하는 위치에 페이지의 내용을 배치 할 수 있습니다. 컨테이너로서 블럭 레벨 요소 인 <div>이면 충분합니다.

여기에서 유일한 (!) 문제는 다음과 같습니다.이 같은 교차 사이트 요청은 브라우저에서 허용되지 않습니다. WebRequest 또는 유사한 방법을 사용하여 다른 곳에서 페이지를로드하여이 서버 쪽을 해결할 수 있습니다.

-1

귀하의 상황에서는 iframe을 대체 할 수 없습니다. 보안 문제로 인해 다른 사이트에 아약스 요청을 할 수 없게됩니다. 단일 페이지 서버 측의 내용을 검색하여 클라이언트에 렌더링 할 수는 있지만 컨텐츠가 현재 사용자 사이트의 컨텍스트에서 실행 중이기 때문에 기능이 포함되지 않습니다.

+0

내가 정확히 원하는 것을 볼 수 있기 전에 Gmail 사이트를 본 적이 있다면 당신은 완전히 잘못되었습니다. – kamiar3001

+0

@ kamiar3001 : gmail은 사이트 간 문제를 피하기 위해 다른 기술을 사용합니다. 즉, 동일한 도메인 출처를 통해로드합니다. 이 방법을 "프록 싱"이라고하며 꽤 잘 작동하지만 페이지의 일부 기능이 예상 한대로 작동하지는 않습니다 (Gmail에서는 아님). – Abel

+0

하지만 당신은 기술이 무엇인지 언급하지 않고 왜 내가 어떻게 우리가 – kamiar3001

0

데이터를 병합 할 위치에 따라 다릅니다. 클라이언트 브라우저에서 데이터를 병합하려면 프레임 이외의 유일한 옵션은 Javascript/Ajax를 사용하는 것입니다.

당신은 AJAX 호출의 텍스트 결과를 채우는 사업부에 HTML() 방법을 페이지로드에 jQuery.ajax()을하고 사용할 수 있습니다.

가능한 한 WebForms 컨트롤 계층 구조와 수명주기를 거의 사용하지 않도록하십시오. 페이지로드시 두 번째 요청에 신경 쓰지 않으면 문제가 AJAX로 해결 될 수 있습니다.

서버 측 (할 드물게 바로 것) 당신이 얻을 브라우저에 반환하기 전에 데이터를 병합 System.Net.HttpWebRequest를 사용할 수의 내용을 병합하려는 경우

.