2013-03-25 61 views
0

我使用插件生成器創建了一個Firefox插件,我想從頁面內容保存一個值,然後從面板內容腳本中讀取它。我想使用localStorage,但我嘗試過,並且無法在頁面和麪板腳本之間共享相同的localStorage。我也嘗試過使用self.port.emit,並且這個方法工作的很好,我可以用port.emit和port.on發送值,但這不是我想要的,因爲我需要每秒刷新一次這個值,如果我使用該方法,然後瀏覽器被重載端口請求,這就是爲什麼我想要使用localStorage或可以存儲在變量中並可以通過面板腳本輕鬆訪問的東西。firefox插件中的面板內容腳本和頁面內容腳本之間的localStorage

這裏我附上面板腳本,它會讀取頁面腳本保存的值。

var panel = require("panel").Panel({ 
      width: 100, 
      height: 100, 
      contentScriptFile: data.url("panel_script.js") 
    }); 

這裏我附上了頁面腳本,它將保存頁面內容的值,面板腳本會讀取它。

var pageMod = require("page-mod"); 
pageMod.PageMod({ 
    include: "*", 
    contentScriptFile: self.data.url("page_script.js"), 
    contentScriptWhen: 'ready' 
    }); 

回答

2

我相信port系統是與Panel頁面交互的推薦路線。不過,您可以通過Firefox插件來解決您發佈的訪問localStorage頁面的問題。

var chrome = require('chrome'); 
var data = require('sdk/self').data; 

var ios = chrome.Cc["@mozilla.org/network/io-service;1"] 
       .getService(chrome.Ci.nsIIOService); 
var ssm = chrome.Cc["@mozilla.org/scriptsecuritymanager;1"] 
       .getService(chrome.Ci.nsIScriptSecurityManager); 
var dsm = chrome.Cc["@mozilla.org/dom/storagemanager;1"] 
       .getService(chrome.Ci.nsIDOMStorageManager); 

var uri = ios.newURI(data.url('index.html'), "", null); 
var principal = ssm.getCodebasePrincipal(uri); 
var storage = dsm.getLocalStorageForPrincipal(principal, data.url('index.html')); 

這樣,您就可以使用storage對象訪問頁面的localStorage,你通常會在網頁中。例如storage.setItem('key', 'value')storage.getItem('key')

+0

您的答案接近我需要的,但不是exaclty。我想從panel_script.js訪問存儲對象,這是我在上面的代碼中發佈的。如果你告訴我如何從panel_script.js訪問,那麼我會認爲你的答案被接受爲100%。感謝您的幫助到目前爲止我發現您的答案對我未來的作品很有幫助。如果你有一個想法如何從面板腳本(不是main.js)訪問存儲對象,那麼我很高興 – Jigberto 2013-03-25 17:25:55

+0

它將無法訪問您的page_script正在處理的同一localStorage,因爲它被掛鉤到不同的域。我知道避免這種情況的唯一方法就是通過像我所示的直接附加訪問。您的加載項可以觀看pageMod localStorage事件,然後寫入您的面板localStorage。這是我看到工作的唯一途徑。祝你好運! – 2013-03-25 17:43:55

+0

好吧,你說「附加組件可以觀看頁面模式localStorage事件,然後寫入你的面板localStorage」..所以這是我需要的,但如何做到這一點,而不發送端口請求。因爲我正在刷新計時器中的這個值,我希望使用mileseconds間隔刷新它。如果在那段時間內,我會發送很多端口請求,然後瀏覽器超載,因爲它發送/接收端口請求。你有一個想法如何讓這個值可用於面板腳本訪問它從一個位置或任何使瀏覽器不會超負荷的任何 – Jigberto 2013-03-25 17:53:57

相關問題