スクリプトがサファリ拡張機能に挿入されると、ページの読み込み時に実行されます。つまり、拡張機能がインストールされると、挿入された JavaScript は、新しく開いたページまたは後でリロードされるページにのみ適用されます。リロードせずにJavaScriptを確実に実行する方法を知っている人はいますか?
または、ユーザーにロードを強制する...これは少し危険に思えます。
スクリプトがサファリ拡張機能に挿入されると、ページの読み込み時に実行されます。つまり、拡張機能がインストールされると、挿入された JavaScript は、新しく開いたページまたは後でリロードされるページにのみ適用されます。リロードせずにJavaScriptを確実に実行する方法を知っている人はいますか?
または、ユーザーにロードを強制する...これは少し危険に思えます。
また、インストール時にスクリプトを「実行」または「添付」する方法を見つけようとしました。これは 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);
}