2010-07-28 1 views
3

Когда скрипт вводится в расширение сафари, он запускается при загрузке страницы, поэтому это означает, что при установке расширения внедренный javascript будет применяться только к вновь открывшимся страницам или страницам, которые будут перезагружены впоследствии. Кто-нибудь знает, как обеспечить выполнение javascript без перезагрузки?Автоматический перезапуск при установке

В качестве альтернативы, заставляя пользователей загружать ... это кажется немного опасным, хотя.

+0

Я не уверен, что вопрос ясен. Это, конечно, не для меня. Скрипты могут быть введены в начале или в конце загрузки страницы. Они загружаются по каждому запросу и для каждого внедренного элемента HTML-источника (например, iframes). –

+0

Зачем вам требуется автоматическая перезагрузка страницы после установки расширения? – zneak

+0

Ну, я думаю, я не хочу, чтобы он автоматически перезагружался, но поскольку сценарии вводятся до или после загрузки страницы, расширение не требует немедленного эффекта, чего я хотел бы достичь. Вы видите, что я имею в виду? – basicallydan

ответ

0

Я также попытался найти способ «выполнить» или «прикрепить» сценарий при установке. Это возможно в Chrome и Firefox, без необходимости перезагрузки страницы. К сожалению, в Safari я не нашел способ сделать это, не перезагружая страницу, и пусть нормальные обработчики addContentScript позаботятся о впрыске скрипта.

Чтобы обновить все вкладки Safari непосредственно после того, как было установлено расширение:

/* 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