나는 두 개의 응용 프로그램이 있는데 하나는 angular js 응용 프로그램이고 다른 하나는 내 로컬에서 실행되는 angular 10 응용 프로그램입니다. 신청.
하지만 아래 코드를 사용하여 날씨 postMessage가 성공했는지 확인할 수 없으며 메시지를 보내는 동안 새 Angular 응용 프로그램에 연결하는 데 문제가 있습니다. 응용 프로그램의 콘솔에는 오류가 없습니다.
Angular JS 애플리케이션 코드 : 이것은 포트 8090의 로컬에서 실행됩니다. index.js 파일이라는 하나의 파일에 아래 코드를 추가했습니다.
var iframeUrl = "http://localhost:4200/indexing";
var htmlContent = "<iframe id='myframe' src="+iframeUrl+" "+"frameBorder='0'"+ "></iframe>";
newElement = angular.element(htmlContent);
$compile(newElement)($scope);
element.replaceWith(newElement);
var ifrmaeWindow= newElement.get(0).contentWindow; // Getting iframe window object
ifrmaeWindow.postMessage('Hello World!','http://localhost:4200/');
새로운 Angular 10 애플리케이션 : 이 응용 프로그램은 포트 4200의 로컬에서 실행 중입니다. 아래는 index.html에 추가 된 리스너 코드입니다.
<script>
window.addEventListener("message",function(message){
console.log("Received msg in angular="+message.origin);
console.log("Received msg in angular="+message.data);
},false);
</script>
이 코드 흐름에서 무엇이 잘못되었으며 postMessage를 사용하여 메시지를 보내지 않는 이유를 알려주십시오. 또한 문제가 수신 측인지 송신 측인지 확인하는 방법도 있습니다. 이것에 대한 어떤 도움이라도 정말 감사하겠습니다. 미리 감사드립니다.
- 답변 # 1
- 답변 # 2
chrismclarke ans에 추가하고 postMessage 함수를 호출하는 동안 시간 초과를 추가하여이 문제를 해결했습니다.
다음은 Angular js 애플리케이션의 코드 블록입니다.
try{ var ifrmaeWindow= newElement.get(0).contentWindow; setTimeout(function(){ ifrmaeWindow.postMessage(jwToken,'http://localhost:4200/indexing'); }, 5000); console.log("message posted"); }catch (e) { console.log("Exception=="+e.message); }
@chrismclarke 귀하의 답변에 감사드립니다 :)
관련 자료
- python - Docker를 사용하여 웹 애플리케이션 빌드 오류
- typescript - Angular를 사용하여 서버에 게시 요청하기
- Python Drive API를 사용하여 200MB 이상의 csv 파일을 업로드 할 수 없습니다
- flutter 경고를 수정하는 방법 - flutter 애플리케이션이 이전 버전을 사용하여 생성되었습니다
- c# - NET 50을 사용하여 데스크톱 애플리케이션에서 RDLC 보고서를 렌더링하는 방법은 무엇입니까?
- javascript - react-router를 사용하여로드 할 수없는 경로
- Spring Boot에서 JUnit 5를 사용하여 RestTemplate을 모의 할 수 없습니다
- spring - JUnit 5에서 @Value를 사용하여 속성 값을 가져올 수 없습니다
- 명령에서 스위치를 사용하여 C # 콘솔 응용 프로그램에서 명령을 실행하는 방법은 무엇입니까?
- jquery - Kendo UI Grid를 사용하여 백엔드 페이지 매김을 사용할 수 없습니다
- 공용 API 용 DOCUMENT를 사용하여 Angular 10 Guard를 내보내는 방법
- javascript - Twilio를 사용하여 보낸 메시지 목록을 resjson 할 수 없습니다
- 앵귤러 머티리얼을 사용하고 있습니다 입력 필드를 이메일로 보내는 방법
- oracle - 정적 응용 프로그램 파일을 카드 목록 아이콘으로 사용
- 동적 ID 선택기를 사용하여 각도 v10에서 동적 구성 요소 표시
- typescript - Angular에서`ComponentFactoryResolver`를 사용할 때 다른 구성 요소로 데이터를 전달할 수 없습니다
- visual studio - 프로젝트에 새 양식 추가 - windows form application c # (macbook 사용)
- reactjs - JSX에서 삼항 연산자를 사용하여 리디렉션을 포함 할 수 없습니다
- 각도 httpModule을 사용하여 json의 중첩 노드에 액세스하는 방법은 무엇입니까?
서로 다른 포트에서 실행되는 두 개의 애플리케이션은 실제로 서로 다른 도메인으로 간주되며 동일한 출처 정책을 통해 iframe이 차단됩니다. https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy
응용 프로그램에서이 문제를 해결하려면 먼저 다음을 지정해야합니다.
document.domain = "localhost"
두 애플리케이션 모두에서 서로 다른 포트에서 통신 할 수 있어야합니다.또한 각도 응용 프로그램 내에서
HostListener
이벤트에 대한 바인딩, 즉