0

확장 기능을 개발 중입니다. 웹 응용 프로그램과 확장 기능의 내용 스크립트 사이의 통신과 content-script와 background-script가 있습니다. HTML5 메시징 API가 사용되는 것으로 보이지만 정확한 컨텍스트에서이를 수행하는 방법은 이해하기 어렵고 구현하기가 어려울뿐 아니라 브라우저에서의 접근 방식 차이로 인해 혼란 스럽습니다 (동일한 API를 지원하는 것처럼 보입니다).Web Extensions와 웹 응용 프로그램 간의 통신을위한 패턴과 관습

예를 들어, Firefox는 manifest.json에있는 externally_connectable을 인식하지 못합니다.이 위치는 요청이 발생한 호스트에 대한 권한을 할당합니다. 그렇다면 Firefox가 개발자에게 권한을 할당 할 것을 어떻게 기대합니까? 나는 그것이 당신이 콘텐츠 스크립트 내에서 그렇게 할 것으로 기대한다고 가정한다.

특히, 앱과 콘텐츠/배경 스크립트간에 데이터를 교환하는 가장 좋은 방법은 무엇인지 혼란 스럽습니다. 가장 좋은 방법은 postMessage/addListener이고 모든 상황에서 작동합니다. 또는 언급 된 사람 : window.dispatchEvent이 선호됩니까?

위의 사항과 관련된 모든 가이드는 높이 평가됩니다.

+0

를 사용하여 DOM 메시징 https://developer.chrome .com/extensions/messaging). 문제 없어. – wOxxOm

+0

Thx. DOM 메시징의 의미는 무엇입니까? – Emo

+0

postMessage 및 dispatchEvent – wOxxOm

답변

1

확장 프로그램 외부에서 오는 메시지는 내가 경험 한 내용이 아닙니다 (그리고 이것이 사용자의 의도를 잘 모르겠습니다).

확실히 읽을 수있는 chrome extensions overview을 철저히 이해해야합니다.

다른 Window.dispatch 및 다른 API를 사용하면 할 수없는 한 내 제안은 chrome.xxx API에 충실합니다.

확장 프로그램에는 메시징을 통해서만 통신 할 수있는 범위가 3 개 있지만 메시징은 구현하기 쉽고 실제로 좋은 디자인으로 이어질 수 있습니다.

콘텐츠 스크립트는 페이지 자체와 상호 작용할 수 있지만 범위는 페이지와 동일하지 않습니다. js는 격리되어 있지만 물론 DOM에 액세스 할 수 있습니다.

콘텐츠 스크립트는 모든 페이지가로드 될 때로드되거나 매니페스트에 포함시켜 일부 페이지 만로드 할 수 있습니다. 또는 강력하게, 그들은 배경 페이지 또는 팝업으로 주입 될 수 있습니다 - 그래서 당신이 팝업에서 제어하려는 경우 programmatic injection을 사용할 수 있습니다 - 유용한 패턴은 팝업 (또는 배경)이 탭, jquery 삽입 (격리되어 있기 때문에 모든 버전), 콘텐츠 스크립트를 삽입하면 콘텐츠 스크립트는 $ (document) .ready()를 사용하여 페이지가로드 될 때까지 기다릴 수 있습니다 (jQuery는 사용할 필요가 없지만 페이지에 jQuery가 있는지 여부 또는 어떤 버전이 있는지 여부를 신경 쓸 필요없이 사용할 수 있음) 유용합니다. 이미 많은이 알고있는 경우

, 당신은 당신이 생각하는 것처럼 혼동하지 않을 수 있습니다 :)

웹 페이지 및 콘텐츠 스크립트 사용 [표준 확장 메시징 (사이
+1

자세한 답변을 보내 주셔서 감사합니다! 그러나, 내 투쟁은 주로 크롬보다는 파이어 폭스와 함께, 구체적으로 내가 'externally_connectable'을 지원하지 않기 때문에 요청 권한을 등록한다 ... 나는 그것이 의사 소통의 특정 패턴을 필요로하고 따라서 내 질문을 생각 ... – Emo