2017-05-28 114 views
0

我在創建一直讓我頭痛的Safari瀏覽器擴展時遇到了問題。停止緩存郵件的Safari擴展

問題是這樣的:我創建了一個擴展,使用注入的腳本從網頁獲取圖像。我在顯示網頁圖像的彈出窗口中有一個函數,並允許用戶單擊並將選定的圖像發送到後端。這一切都經歷處理信號和消息的全球頁面。場景是這樣的:

  1. 當彈出窗口打開時,它向全局頁面發送一個信號,以從注入的腳本啓動響應(圖像URL)。
  2. 當全局頁面從注入腳本獲取消息時,它會調用popover中的函數,將來自注入腳本的數據作爲參數傳入。
  3. 彈出窗口顯示通過注入腳本從全局頁面返回的所有圖像。

問題是,我每次打開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); 
     } 
    }); 
    } 
} 
+1

好的,所以我能夠解決這個問題。 – mcinteemasud

回答

0

好吧,所以我能夠解決這個問題。首先,我將popoverHandler從eventListener中分離出來。出於某種原因,它多次觸發該功能並返回幾張相同圖像的列表。然而,主要問題是在popover.js中,我將圖像列表存儲爲var。當我刪除var時,數據停止了,並且每次都得到一個新的列表。