Chrome扩展程序chrome.downloads.download工作

时间:2018-01-23 18:22:33

标签: javascript google-chrome google-chrome-extension

我正在创建一个包含下载文件按钮的扩展程序。 该文件是使用从chrome的localStorage中检索到的内容创建的。

在panel.html中,我有以下代码:

<!DOCTYPE html>
<html>
<body>
    <button id="btnDownload">Download</button>

    <script src="messaging.js"></script>
    <script src="panel.js"></script>
</body>
</html>

Panel.js 具有以下事件侦听器:

 document.querySelector('#btnDownload').addEventListener('click', function() { 
        sendObjectToInspectedPage({action: "download"}); 
    });

sendObjectToInspectedPage函数位于 messaging.js

function sendObjectToInspectedPage(message) {
    message.tabId = chrome.devtools.inspectedWindow.tabId;
    chrome.extension.sendMessage(message);
}

在我的 background.js 文件中,我有以下代码:

chrome.extension.onConnect.addListener(function (port) {

    var extensionListener = function (message, sender, sendResponse) {

        if(message.tabId && message.content) {           
               if(message.action  === 'download') {

                    var aFilePart = ['<a id="a"><b id="b">Hi :) !</b></a>'];
                    var blob = new Blob(aFilePart, {type : 'text/html'});
                    var url = URL.createObjectURL(blob);

                    chrome.downloads.download({
                    url: url 
                    });

                //Pass message to inspectedPage
                } else {
                    chrome.tabs.sendMessage(message.tabId, message, sendResponse);
                }

        // This accepts messages from the inspectedPage and 
        // sends them to the panel
        } else {
            port.postMessage(message);
        }
        sendResponse(message);
    }

    // Listens to messages sent from the panel
    chrome.extension.onMessage.addListener(extensionListener);

    port.onDisconnect.addListener(function(port) {
        chrome.extension.onMessage.removeListener(extensionListener);
    });

});
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    return true;
}); 

我想生成包含我传递内容的文件,并在点击下载按钮时将文件下载到我的电脑但这不起作用。

我做错了吗?有什么遗失的吗?

由于

1 个答案:

答案 0 :(得分:0)

您应该使用'runtime'在messaging.js中发送消息

chrome.runtime.sendMessage(message);

此外,在后台脚本中,这不是必需的,

chrome.extension.onConnect.addListener()

这是一个简单的例子

function popupMsg(message) {
    if (message.action == "download") {
        //Do Something
    } else {
        //Something else
    } 
}

chrome.runtime.onMessage.addListener(popupMsg);

这是运行时文档https://developer.chrome.com/apps/runtime