2014-09-26 3 views
1

간단한 Chrome 확장 프로그램을 Safari 확장 프로그램으로 이식하려고합니다. 사용자가 새 탭을 열 때 로컬 HTML을 표시해야하지만 파일의 경로가 URL 표시 줄에 나타나서는 안됩니다.Safari Extension : 사용자가 새 탭을 열 때 기본 페이지 또는 빈 페이지 대신 로컬 HTML을 표시합니다.

크롬 확장에 대한 코드는 다음과 같습니다

manifest.json을 main.html이 사파리에서

<html> 
    <head></head> 
    <body> 
    Hello World! 
    </body> 
</html> 

, 내가 얻을 가까운 만드는 것입니다

{ 
    ... 
    "chrome_url_overrides": { 
    "newtab": "main.html" 
    }, 
    "permissions": [ 
    "tabs" 
    ] 
} 

도구 모음의 버튼은 URL로 리디렉션됩니다.

어떻게 동일한 기능을 수행 할 수 있습니까? 행운을 빌어 예를 찾으려고 노력했습니다.

답변

2

안정적으로 수행하지 못할 수 있습니다. safari.application 또는 SafariBrowserWindow 개체에서 발생하는 open 이벤트를 사용하여 새 탭을 열면이를 감지 할 수 있지만 새 탭에 페이지가 즉시로드되지 않도록해야합니다. 새 탭에서 beforeNavigate 이벤트를 청취하면됩니다. 그런데 합병증이 있습니다.

탭이 계속 비어 있으면 beforeNavigate 이벤트가 즉시 실행되지 않으므로 시간 초과를 사용하여 이벤트 수신을 중지하고 원하는 페이지를로드 할 수 있습니다. 그러나 새로운 탭은 비워 둘 수 없습니다. Top Sites 페이지 (기본 동작)를 표시하거나, 사용자가 지정한 홈 페이지를 표시하거나, 이전 탭에로드 된 페이지를 표시 할 수 있습니다.

홈 페이지 및 동일한 페이지의 경우 새 탭에서 beforeNavigate 이벤트가 발생하고 url 속성 값은로드 할 URL이됩니다. 이러한 유형의 새 탭을 납치하여 자신의 페이지를로드할지 여부는 귀하에게 달려 있습니다.

상위 사이트의 경우 새 탭에서 beforeNavigate 이벤트가 발생하지만 url 속성은 null이됩니다. 따라서이를 감지하고 새 탭에서 선택한 페이지를로드 할 수 있다고 생각할 수 있습니다. 그러나이 문제 (null url이있는 beforeNavigate 이벤트)가 새 탭에서 자체 페이지 중 하나를 열 때 문제가 발생합니다. 따라서 URL이 beforeNavigate 인 모든 탭을 납치하는 경우 다른 확장 프로그램이 자신의 페이지를 열 수 없게됩니다.