2012-04-17 2 views
0

Safari 확장 프레임 워크는 명시 적으로 확장간에 메시지 전달을 지원하지 않습니다. 페이지를 확장명을 실행하는 알려주지 않고 이 문제를 해결할 수있는 해킹 찾고 있어요. (하지 테스트)두 Safari 확장 프로그램은 어떻게 서로 통신 할 수 있습니까?

제안 :

  1. 한 확장에 대한에 숨겨진 탭 열립니다 openTab와 빈 # 확장 채널(). 다른 하나는 해당 탭을 URL로 검색하고이를 찾습니다. 그들은 의사 소통을 위해 해당 페이지의 요소를 생성하고 소비합니다.

  2. 확장 프로그램이 도메인에서 쿠키를 읽을 수있는 경우 은 확장 -homepage.com에 임의의 ID의 쿠키를 설정하고 다른 쿠키는이를 읽습니다. 그런 다음 이름 extension-message-[the random ID] "로 DOM 이벤트를 생성하므로 페이지에 듣지 않을 수

  3. 청원을 사파리 개발자들은 API에 onRequestExternal을 추가;.)

당신이 다른 방법을 생각할 수 ? 당신은? 위의 작업을 입수했습니다 나는 버전 두 가지를

+0

본인 스스로 시도하지는 않았지만 [window.postMessage] (https://developer.mozilla.org/en/DOM/window.postMessage)가 도움이 될 수 있습니까? – canisbos

답변

0

그것은 중개자 현재 탭에서 페이지와, 확장간에 메시지를 전달하는 window.postMessage을 사용하는 것이 가능하다.

을 공유 한 간단한 증명 확장은 개념 증명으로 https://github.com/canisbos/ClickClack에 있습니다. 설치하면 하나의 확장 프로그램의 도구 모음 버튼을 클릭하면 다른 확장 프로그램의 이미지가 뒤집어집니다. socket.io, WebSocket-Node는 등 두 개의 확장 사이에 강력한 양방향 통신을 할 수 있습니다, 또는 확장과 외부 세계 사이에 참조

+0

그러면 확장 프로그램이 설치되었음을 페이지에 알릴 수 없습니까? 이 메시지도들을 수 있습니다. –

+0

당신이 옳다고 생각합니다. – canisbos

0

하자 확장 A는 확장 B로 자바 스크립트에서 구현되는 웹 소켓 서버에 WebSocket 연결을 엽니 다.