this article on MDN에 따르면 postMessage를 사용하여 Chrome에서 콘텐츠 스크립트와 메시지를주고받는 것은 소스 속성을 제대로 정의 할 수 없으며 targetOrigin이 잠재적으로 악의적 인 사이트로 전달하기 어렵 기 때문에 안전하지 않습니다. 여전히 사실입니까? 받은 메시지의 출처를 확인하고 메시지를 특정 콘텐츠 스크립트에만 독점적으로 보내는 다른 방법이 있습니까? 아니면 콘텐츠 스크립트를 모두 사용하는 대안이 있습니까?Chrome 확장 콘텐츠 스크립트로 /에서 PostMessage에 대한 보안을 설정 하시겠습니까? 가능한 대안?
0
A
답변
1
MDN의 기사에서 "크롬"은 "Chrome"을 의미하지 않고 Chrome 권한 (Firefox의 다른 의미는 "")으로 실행되는 확장 코드를 가리 킵니다. 구글 크롬/크롬에서
는 콘텐츠 스크립트 (즉, 콘텐츠 스크립트window
웹 페이지에
window
에서 다른 것을 의미) 웹 페이지보다
different environment에서 실행됩니다.
그러나 콘텐트 스크립트에서 페이지로 메시지를 보내면
event.source
은 페이지의
window
과 동일합니다. 따라서 메시지가 실제로 동일한 페이지 내의 (내용) 스크립트에서 전송되었는지 확인하려면
if (event.source === window) { ... }
을 사용할 수 있습니다.
-
프레임이 서로 다른 기원에 위치하는 경우
- , 또는 콘텐츠 스크립트가있는 경우 : 당신이 (같은 탭에서) 다른 콘텐츠 스크립트에 메시지를 보내려면
는 다음 두 가지 옵션이 있습니다 다른 탭에있는 경우 배경 페이지로 메시지를 보내야합니다. 그러면 배경 페이지에서 Chrome extension message passing API를 사용하여 메시지를 대상 콘텐츠 스크립트로 전달합니다.
- 통신 프레임이 같은 출처에 있으면 메시지 전달 API를 사용하지 않고 해당 변수를 직접 공유 할 수 있습니다. 다른 하나 개의 콘텐츠 스크립트에서 메시지를받을 등
top
, parent
, <HTMLIFrameElement>.contentWindow
, frames[index]
, 또 다른 (hackish) 방법을 사용하여 window
객체를 참조하면 chrome.storage
API를 통해입니다. 수신 측에서는 chrome.storage.onChanged
이벤트를 바인드하십시오. 메시지를 "보내려면"chrome.storage.local.set
을 사용하십시오. 키 - 값 쌍을 제거한 후에는 메시지를받지 못한 것을 잊지 마십시오.