3

메시지를 전체 페이지에서 특정 탭으로 보낼 수 있습니까?
내가 현재하고있는 것은 탭 생성시 삽입 된 스크립트가 고유 ID를 생성하고이 번호를 가진 메시지를 글로벌 페이지에 보내고 글로벌 페이지가이 번호를 저장한다는 것입니다.
글로벌 페이지가 일부 데이터를 탭 (예 : #3)으로 보내야하는 경우 글로벌 페이지는 숫자가 #3 인 모든 탭에 메시지를 "브로드 캐스팅"하여 탭으로 전달됩니다 (전체 반복 탭을 클릭하고 각 탭에 메시지 보내기).
Chrome과 같은 것이 있습니까 (예 : chrome.tabs.sendRequest(tabID, {action: 'respond', params:[channel,msg,async]});)?Safari 확장 프로그램에서 특정 탭으로 메시지 보내기

지금 내가하고있는 일은 삽입 된 스크립트 측면에서 각 스크립트에이 메시지를 수신하는 수신기가 있다는 것입니다. 콘텐츠 스크립트의 고유 번호가 전체 페이지에서 보낸 번호와 같으면이 메시지는 해당 메시지이고, 그렇지 않으면 doNothing입니다.

사파리에서 더 간편하게 사용할 수있는 방법이 있습니까?

답변

4

전체 페이지의 메시지 이벤트 처리기 내에서 event.target은 메시지를받은 탭을 나타냅니다. 예를 들어 :

function handleMessage(e) { 
    if (e.name === 'whatIsMyUrl?') { 
     e.target.page.dispatchMessage('yourUrlIs', e.target.url); 
    } 
} 
safari.application.addEventListener("message", handleMessage, false); 

사파리 확장 API 탭 ID를 가지고 있지 않지만, 당신은 단지 연관 배열의 각 탭을 유지하고 나중에 그것을 해결하기 위해 인덱스를 사용할 수 있습니다. 예를 들어 :

function handleMessage(e) { 
    if (e.name === 'hereIsMyId') { 
     myTabs[e.message] = e.target; 
    } 
} 
safari.application.addEventListener("message", handleMessage, false); 

// later... 
myTabs[someId].page.dispatchMessage('haveSomeCake'); 
0

사파리 응답

글로벌 페이지에서 탭에 직접 저장 .. 그래서 주입 스크립트의 메시지에 예를 들어

// global page 
safari.application.addEventListener("message", function(event){ 
    switch(event.name){ 
     case "saveData": 
      event.target.page.tabData = { data: myData } 
     break; 
     case "getData": 
      event.target.page.dispatchMessage("tabData", myData); 
     break; 
    } 
}, false); 

-

// injected page 

// first save data 
safari.self.tab.dispatchMessage("saveData", {firstname:"mike", age: 25}); 

// setup listner to recevie data 
safari.self.addEventListener("message", function(event){ 
    switch(event.name){ 
     case "tabData": 
      // get data for page 
      console.debug(event.message); 
      // { firstname: "mike", age: 25 } 
     break; 
    } 
}, false); 

// send message to trigger response 
safari.self.tab.dispatchMessage("getData", {}); 
+0

및 당신은 내가 생각하기에 미리 가져온 많은 페이지들로 새로운 사파리를 다루기 위해 추가로해야 할 일이있을 것이다. –