我在創建一直讓我頭痛的Safari瀏覽器擴展時遇到了問題。停止緩存郵件的Safari擴展
問題是這樣的:我創建了一個擴展,使用注入的腳本從網頁獲取圖像。我在顯示網頁圖像的彈出窗口中有一個函數,並允許用戶單擊並將選定的圖像發送到後端。這一切都經歷處理信號和消息的全球頁面。場景是這樣的:
- 當彈出窗口打開時,它向全局頁面發送一個信號,以從注入的腳本啓動響應(圖像URL)。
- 當全局頁面從注入腳本獲取消息時,它會調用popover中的函數,將來自注入腳本的數據作爲參數傳入。
- 彈出窗口顯示通過注入腳本從全局頁面返回的所有圖像。
問題是,我每次打開popover時,都會追加上次調用的圖像,而不是給出新的圖像列表。例如,打開第一個彈出窗口時,我會看到一個圖像(假設頁面只有一個圖像)。如果我關閉popover並再次打開它,我會得到兩個相同的圖像。如果我第三次關閉並打開彈出窗口,它會從第二次將第一張圖像與第一張圖像相加,並給我3張相同的圖像。在popover的第四次打開時,我得到1 + 1 + 1 + 1,所以4張圖像。所以它似乎在追加信息,而不是每次都給我一個新的信息。
我的問題是:如何銷燬每個彈窗關閉後緩存的消息?我希望我清楚。也許還有其他事情正在發生在我不知道的代碼上。如果可以的話請幫忙。這裏是我從全球HTML代碼:
function popoverHandler(event) {
//check for popover opening
if (event.target.identifier === "MyPopUp") {
//send message to injected script to send page info
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("getContent", '', false);
//this works fine, I get this message every time popover opens
console.log('getContent message sent');
//listen for message containing page info from injected script
safari.application.addEventListener('message', function (messageEvent) {
//only get message from current tab
if (messageEvent.name === "pageInfo" && messageEvent.message.url === safari.application.activeBrowserWindow.activeTab.url) {
pageInfo = messageEvent.message;
//the problem seems to be in here. Every time I open the popover, //I get the current page info plus all the page info messages from //the previous time I open the pover, all duplicates of the previous //messges
console.log(pageInfo);
// call a function in the popover, passing the pageInfo data //received from the injected script
safari.extension.popovers[0].contentWindow.onPageDetailsReceived(pageInfo);
}
});
}
}
好的,所以我能夠解決這個問題。 – mcinteemasud