2012-12-07 28 views
1

我在background.js有這樣的:使用getBackgroundPage()給我:對象[對象]窗口有沒有方法 'getFromStorage'

var write = function (line) { 
    if (localStorage["silent"] == true) { 
    chrome.extension.getBackgroundPage().console.log(line); 
    } else { 
    alert(line); 
    } 
} 
var getFromStorage = function (item, default) { 
    if (localStorage[item] == undefined) { 
    write("Could not find " + item + " in local storage..."); 
    return default; 
    } else { 
    return localStorage[item]; 
    } 
} 

var isOn = getFromStorage("isOn", true); 
var silent = getFromStorage("silent", false); 

這在我popup.js:

var bgPage = chrome.extension.getBackgroundPage(); 
var isOn = bgPage.getFromStorage("isOn", true); 
var silent = bgPage.getFromStorage("silent", false); 

而且我得到這個錯誤:

Object [object Window] has no method 'getFromStorage' 

幫助是極大的讚賞,感謝:)

+1

終止是'getFromStorage'變量在全球層面定義的?改爲使用'window.getFromStorage = ...'。 (另外,爲什麼您使用的'getBackgroundPage()'在後臺頁面本身?) – pimvdb

+2

要注意的是,'default'保留,你不應該/不能使用它作爲參數 – C5H8NNaO4

+0

@pimvdb是第一件事情, getFromStorage是全球性的,只要它在後臺頁面中,我想,所以我只會嘗試一下你的建議。顯然,我不能在後臺頁面中使用getBackgroundPage而無法使用console.log,而我知道這並不合理,但我該怎麼辦? 編輯:顯然背景頁面中的東西不是全球性的,所以我不能那樣做。 –

回答

2

你應該在你的後臺腳本

var write = function (line) { 
    if (localStorage["silent"] == true) { 
     chrome.extension.getBackgroundPage().console.log(line); 
    } else { 
     alert(line); 
    } 
    } 
    var getFromStorage = function (item, d) { 
    if (localStorage[item] == undefined) { 
     write("Could not find " + item + " in local storage..."); 
     return d; 
    } else { 
     return localStorage[item]; 
    } 
    } 

    var isOn = getFromStorage("isOn", true); 
    var silent = getFromStorage("silent", false); 

因爲default以JavaScript保留更改default參數。 (它是用來結合Switch statement
因此後臺頁面將不會加載所有,並檢查它應該導致這樣的事情Uncaught SyntaxError: Unexpected token default at background.js:8

然後導致錯誤Object [object Window] has no method 'getFromStorage' 在彈出的腳本,因爲getFromStorage卻從來沒有被加載在你的後臺腳本,因爲在8號線

+0

哦,哇,好吧...非常感謝,我仍然是一個javascript no0b所以:P –