當一個腳本注入Safari瀏覽器擴展時,它會在頁面加載時運行,這意味着當安裝擴展時,注入的javascript將只應用於新打開的頁面或之後重新加載的頁面。有誰知道如何確保JavaScript運行而無需重新加載?安裝時自動重裝
另外,迫使用戶加載......雖然這似乎有點危險。
當一個腳本注入Safari瀏覽器擴展時,它會在頁面加載時運行,這意味着當安裝擴展時,注入的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);
}
糟糕。我錯過了localStorage只處理字符串,所以我們必須補償,例如通過引入JSON.parse和JSON.stringify。答案已更新。 – Claudijo 2012-07-17 10:23:20
我不知道這個問題是顯而易見的。這當然不是我。腳本可以在頁面加載的開始或結束時注入。它們會在每個請求和每個嵌入的HTML源元素(例如iframe)上加載。 – 2010-07-28 17:33:39
爲什麼安裝擴展程序後需要自動重新加載頁面? – zneak 2010-07-30 04:45:42
嗯,我猜我不一定希望它自動重新加載,但因爲腳本是在頁面加載之前或之後注入的,所以擴展不會立即生效,這是我想要實現的。你明白我的意思嗎? – basicallydan 2010-07-30 16:53:06