2017-06-19 108 views
0

這是Firefox(Waterfox)中的greasemonkey userscript。如何創建持久工具欄?

我們有一個雲數據庫(CRM動態),其中爲了加載特定記錄,瀏覽器執行三個頁面加載不同的URL和參數。

我想從這些頁面加載的一個(即加載在中間的一個)獲取參數,並在頁面上顯示它的地方,以供參考。所以我創建了一個適合主要功能區下方的div。

問題是,由於頁面加載了三次,這意味着腳本加載了三次,所以我使用GM_getValueGM_setValue來存儲和檢索後續頁面加載的數據。

然而,比這更糟糕。

  • 頁面中的DOM項只能在第一次加載時添加/修改 - 此加載會加載所有html。
  • 我需要的值是在第二負載的查詢參數 - 這只是填寫數據的第一頁。
  • 有沒有辦法讓查詢參數值到第二或第三頁加載工具欄-DIV;直到第二次加載時我纔有這個價值。我認爲後兩個頁面加載僅用於在頁面加載之間傳遞參數 - 這些加載中沒有頁面DOM。
  • userscript在每個頁面加載時觸發。
  • 在第三個頁面加載我可以執行的操作,但不能與HTML交互(沒有任何在這個頁面加載),即使HTML是在窗口中。

有沒有辦法把我的toolbar-div放在瀏覽器的DOM而不是頁面的DOM中?這樣可能會有一個地方每個頁面加載有權訪問。

我想要做的是以某種方式獲得第一頁加載做第三頁加載完成後。

+0

我可以將jquery加載到userscript中,沒問題。我會張貼一個例子,但我想不出一種方式來讓我們無法訪問我們的CRM。 – bgmCoder

+0

這個欺騙看起來很有趣,但是我無法知道url +欺騙所需的參數;如果我知道第一頁加載的內容,我根本不需要進行惡搞。 – bgmCoder

+1

這個問題太廣泛了,你需要把它歸結爲一個MCVE。通常,您可以使用'postMessage'或'localStorage'(僅限於相同的域)或'GM_setValue'在腳本實例之間進行通信來完成您想要的操作。如果它們是同域(i)幀,則可以使用其他選項。 –

回答

0

想通了!布羅克亞當的評論讓我有了一個解決方案。謝謝,布洛克。

所以我的數字代碼,以第一頁面加載運行,並確保它這樣做:

$(window).on('load', function() { 
    console.log('updating itemid'); 
    $('#myd').text(GM_getValue("itemid")); 
}); 

window.load每個頁面加載事件觸發,所以當最後一個頁面加載運行時,會觸發該加載事件並更新div文本。顯然,直到第三個頁面加載完成後,此事件纔會觸發。