试图使用chrome.downloads(由于某种原因,它是未定义的)

时间:2017-03-24 09:12:13

标签: javascript google-chrome-extension

我正在尝试使用chrome.downloads通过Chrome扩展程序从网址下载文件(图片),但出于某种原因,chrome.downloadsundefined(收到警告:{{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"
        ]
    }]
}

那么,我怎样才能做到这一点?

2 个答案:

答案 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。使用背景或事件页面以及扩展消息,或直接从扩展弹出窗口。