跨域要求
由于安全問題,chrome制止了跨域要求的。在某些場(chǎng)景中,我們需要在popup的腳本中發(fā)送跨域要求,但是在chrome中履行,返回的status總是為0 。這樣很不方便。
但是在插件中,background腳本是可以履行跨域要求的。
content腳本中也能夠要求,但是必須先設(shè)置manifest.json里的permissions,開啟對(duì)某些地址的跨域要求。
這里有1些解決方案。
1.利用通訊
popup發(fā)送消息,background履行跨域要求,返回信息。但是,這里有個(gè)問題,popup里面的發(fā)送消息時(shí)回調(diào)函數(shù)并沒有履行(content和background通訊中履行沒問題)。但是我們需要在收到消息后履行某些操作。因此,這樣問題很大。
2.調(diào)用background函數(shù)
其實(shí),還有種最簡(jiǎn)單的方法,那就是直接調(diào)用background的函數(shù)。由于,popup里面可以獲得background:
var bgPage = chrome.extension.getBackgroundPage();
只要調(diào)用函數(shù)bgPage.someFunc();就能夠使用background的功能了。
比如你在background里面實(shí)現(xiàn)函數(shù):
DownloadPage(url,callback){
var content = "";
// 下載代碼,可以跨域要求
// .......
callback(content);
};
在popup里面調(diào)用:
bgPage.DownloadPage('http://www.baidu.com',function(content){
// 在這個(gè)回調(diào)函數(shù)里面改變popup內(nèi)容等
});