我正在尝试使用chrome.downloads通过Chrome扩展程序从网址下载文件(图片),但出于某种原因,chrome.downloads
为undefined
(收到警告:{{1 }})。我的目标是基于example from Google。
我的测试扩展程序没有任何弹出窗口,只有一个基本清单和一个非常简单的JavaScript文件。
的manifest.json :
Cannot read property 'download' of undefined
index.js :
{
"manifest_version": 2,
"name": "Testing chrome.downloads.download",
"version": "0.0.1",
"permissions": [
"activeTab",
"downloads",
"<all_urls>"
],
"content_scripts": [{
"matches": [
"http://www.example.com/*"
],
"js": [
"jquery.js",
"index.js"
]
}]
}
那么,我怎样才能做到这一点?
答案 0 :(得分:1)
因此经过一些研究后我看到内容脚本不直接支持下载,但您可以将消息传递到支持下载的后台页面。我加入背景页面的原因是能够看到控制台;)你可以尝试直接转到background.js
的manifest.json
{
"name": "Download static images",
"description": "Downloads images defined with <img> tag from watched webpage(s) by injecting a script",
"version": "1.0",
"browser_action": {
"default_icon": "debuggerPause.png",
"default_title": "get page html"
},
"background": {
"page": "background.html"
},
"content_scripts": [
{
"matches": ["http://stackoverflow.com/*"],
"js": ["main.js"]
}
],
"permissions": [
"tabs",
"background","downloads"
],
"manifest_version": 2
}
main.js
function getHtml() {
var pagehtml = document.documentElement;
var imgs=pagehtml.getElementsByTagName( 'img' );
var pass_array=[];
for (i in imgs){
pass_array.push(imgs[i]["currentSrc"]);
}
console.log(pass_array);
var param = {collection : pass_array};
chrome.runtime.sendMessage(param);
};
getHtml();
background.js
chrome.runtime.onMessage.addListener(
function(arg, sender, sendResponse) {
var args=arg.collection;
for (i in args){
var img_url=args[i];
try{
saveas=img_url.replace(/[^a-zA-Z0-9]/g,'-');
}
catch (problem){
}
chrome.downloads.download({
url: img_url,
filename: saveas,
saveAs: false
});
}
});
function sendResponse(){
}
backgroundpage.html
<script src="background.js"></script>
答案 1 :(得分:1)
你不能使用很多铬。方法包括内容脚本中的.downloads。使用背景或事件页面以及扩展消息,或直接从扩展弹出窗口。