3

크롬, Firefox & Safari에 대해 상당히 복잡한 브라우저 확장 프로그램을 작성하고 있습니다.FF/Chrome과 같이 Safari 확장 프로그램에 콘텐츠 스크립트를 조건부로로드 하시겠습니까?

Firefox & Firefox에서는 URL 일치에 따라 어떤 콘텐츠 스크립트가 어떤 사이트에 삽입되는지 지정할 수 있습니다.

Safari는 (세분화 된) 기능을 제공하는 것처럼 보이지 않습니다. 모든 사이트에 대해 하나의 화이트/블랙리스트 만 허용합니다.

이 방법이 있습니까? 그렇지 않은 경우 조건부로 자바 스크립트 파일을로드 할 수 있습니까? (DOM에 추가 할 수 없다는 것을 명심하십시오).

나는 yepnope을 시도했지만 DOM에 추가됩니다.

참고 : 실제 파일에 논리를 추가하는 것은 본질적으로 확장자간에 복제되는 라이브러리 코드이므로 추가하지 않으려합니다.

답변

9

safari.extension.addContentScriptsafari.extension.addContentScriptFromURL을 사용하면 프로그래밍 방식으로 스크립트를 삽입 할 수 있습니다. 이러한 메소드는 전체 페이지, 확장 팝업 또는 확장 막대에서 사용할 수 있습니다. 두 방법의 경우, 인수는 다음과 같습니다

  • (문자열로 또는 각각 URL로) 주입 스크립트,
  • 스크립트를 삽입하는의 페이지와 일치하는 URL 패턴의 화이트리스트,
  • 페이지를 제외 할 블랙리스트와
  • 스크립트를 종료 스크립트 (또는 시작 스크립트)로 삽입할지 여부에 대한 부울입니다.

자세한 내용은 Safari 확장 참조 서의 this page을 참조하십시오.

화이트리스트와 블랙리스트는 모두 UNIX 와일드 카드와 유사하지만 동일하지 않은 URL 패턴 형식을 사용하며 정규 표현식만큼 강력하지는 않습니다. 이 패턴 형식은 this page 하단에 설명되어 있습니다.

+0

고맙습니다. 나는 그것을 찾을 수 없다고 믿을 수 없다. –

3

허용되는 대답은 정확하지만 Chrome 및 Firefox처럼 현재 열려있는 탭에 스크립트를 프로그래밍 방식으로 삽입 할 수 없다는 점에 유의해야합니다. SafariExtension Class Reference 상태 :

스타일 시트 및 스크립트 추가 및 제거. 콘텐츠 스타일 시트 추가 또는 제거는 페이지에 즉시 적용됩니다. 내용 스크립트를 추가하거나 제거하면 해당 지점 다음에 열리거나 다시로드 한 페이지에만 적용됩니다. Info.plist 파일에있는 스타일 시트 나 스크립트를 제거하면 현재 브라우저 세션에서만 스타일 시트 나 스크립트가 제거됩니다. 이 때문에 제한

, 그것은 단순히 대신 Info.plistScripts 속성에 의존 종종 쉽다.

+0

OP가 불평하고있는 "Info.plist"가 "one white/blacklist"가 아니 었나요? – Teepeemm

+0

실제로 그것은 @ Teepeemm입니다. 제 요점은'addContentScript'와'addContentScriptFromURL'는 열린 탭에 영향을 줄 수 없다는 심각한 한계가 있음을 분명히하는 것이 었습니다. 나는 (그리고 분명히 다른 사람들이)이 질문에 비틀 거리며 진정한 동적 인 로딩을 허용한다고 생각했다. –