컨텍스트 메뉴 항목을 추가하는 간단한 Safari 확장을 개발 중입니다.이 컨텍스트 메뉴 항목을 클릭하면 현재 페이지의 데이터로 특정 작업을 수행 할 수 있습니다. 제 injected-scripts.js
에는 클릭 된 탭에 대해 상황에 맞는 메뉴가 표시되어야하는지 여부를 결정하는 기능이 있습니다 (validForContextMenu
). 이 함수와 함께 탭에 내 컨텍스트 메뉴 항목이 표시되는지 여부를 알려주기 위해 다음 메시지를 내 global.html
에 전달합니다. 이 모든 사실이 그렇다 아주 잘 밖으로 작동각 탭의 컨텍스트 메뉴 항목 유효성 검사
var contextMenuDisabled = true;
function respondToMessage(theMessageEvent) {
if (theMessageEvent.name === "validate") {
contextMenuDisabled = theMessageEvent.message;
}
}
safari.application.activeBrowserWindow.activeTab.addEventListener("message", respondToMessage, false);
function validateCommand(event) {
event.target.disabled = contextMenuDisabled;
}
safari.application.addEventListener("validate", validateCommand, false);
: global.html
에서
safari.self.tab.dispatchMessage("validate", validForContextMenu());
나는이 메시지를 듣고 injected-scripts.js
에 의해 반환 된 데이터를 저장하고, 실제 검증을 수행하기 위해 다음을 수행하고 유효성 검사는 한 번만 수행되며 내 확장이로드 될 때 가장 앞에있는 탭/페이지에 대해서만 수행됩니다. 해당 페이지가 컨텍스트 메뉴에 유효하면 다른 모든 페이지도 마찬가지입니다. 반대의 경우도 마찬가지입니다. 유효성 검사를 Safaris 탭마다 개별적으로 수행하고 싶습니다.
Ca이 작업을 수행 하시겠습니까? 주입 된 스크립트 나 메시지 전달 방식에 뭔가 빠졌는가?
감사합니다, 그건 난 후 정확히 무엇을했다! 'global.html'이 싱글 톤 (singleton)이라는 완벽한 의미를 갖습니다. 각 탭에 대한 유일한 인스턴스는 여러 가지 방법으로 확장 가능성을 제한했을 것입니다. – Simon