2010-07-28 5 views
3

사파리 확장 프로그램에 스크립트를 삽입하면 확장 프로그램이 설치되었을 때 새로로드 된 페이지 나 이후에 다시로드되는 페이지에만 적용됩니다. 누구든지 다시로드하지 않고도 자바 스크립트가 실행되도록하는 방법을 알고 있습니까?설치시 자동 새로 고침

또는 사용자에게로드를 강요하는 ... 이것은 다소 위험한 것 같습니다.

+0

나는 질문은 분명하다 모르겠어요. 그것은 분명 나에게 없다. 페이지로드의 시작 또는 끝 부분에 스크립트를 삽입 할 수 있습니다. 각 요청 및 HTML 소스 요소 (예 : iframe)에로드됩니다. –

+0

확장 프로그램이 설치된 후에 페이지를 자동으로 다시로드해야하는 이유는 무엇입니까? – zneak

+0

글쎄, 내가 자동으로 다시로드하고 싶지는 않지만 스크립트가 페이지로드 전후에 삽입되기 때문에 확장 기능이 즉각적인 영향을받지는 않는다. 무슨 뜻인지 알 겠어? – basicallydan

답변

0

나는 설치시 스크립트를 "실행"또는 "부착"하는 방법을 찾으려고 노력했습니다. 이는 페이지를 새로 고침하지 않고도 Chrome 및 Firefox에서 가능합니다. 불행히도 Safari에서 페이지를 다시로드하지 않고도이를 수행 할 수있는 방법을 찾지 못했고 일반적인 addContentScript 핸들러가 스크립트 주입을 처리하게했습니다.

확장자를 설치 한 후 바로 모든 사파리 탭을 다시로드하려면 :

/* In glabal.js */ 

// Reloads all tabs 
function reloadTabs() { 
    var browserWindows = safari.application.browserWindows; 
    for (var i = 0; i < browserWindows.length; i++) { 
    var tabs = browserWindows[i].tabs; 
    for (var j = 0; j < tabs.length; j++) { 
     tabs[j].url = tabs[j].url; 
    } 
    } 
} 

// Called on first run 
function onInstall() { 
    reloadTabs(); 
} 

var firstRun = localStorage['extensionHasPreviouslyRun'] === undefined || 
    !JSON.parse(localStorage['extensionHasPreviouslyRun']); 

if (firstRun) { 
    onInstall(); 
    localStorage['extensionHasPreviouslyRun'] = JSON.stringify(true); 
} 
+0

죄송합니다. 나는 localStorage가 문자열만을 처리하기 때문에 JSON.parse와 JSON.stringify를 도입하여이를 보완해야한다. 답변이 업데이트되었습니다. – Claudijo