首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Chrome扩展chrome.downloads.download工作

Chrome扩展chrome.downloads.download工作
EN

Stack Overflow用户
提问于 2018-01-23 18:22:33
回答 1查看 365关注 0票数 0

我正在创建一个具有下载文件按钮的扩展名。该文件是使用从chrome的localStorage检索的内容创建的。

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

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html>
<body>
    <button id="btnDownload">Download</button>

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

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

代码语言:javascript
运行
复制
 document.querySelector('#btnDownload').addEventListener('click', function() { 
        sendObjectToInspectedPage({action: "download"}); 
    });

sendObjectToInspectedPage函数在messaging.js

代码语言:javascript
运行
复制
function sendObjectToInspectedPage(message) {
    message.tabId = chrome.devtools.inspectedWindow.tabId;
    chrome.extension.sendMessage(message);
}

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

代码语言:javascript
运行
复制
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;
}); 

当单击“下载”按钮时,我希望生成包含我传递的内容的文件,并将该文件下载到我的计算机,但这不起作用。

我做错了什么吗?有什么东西不见了吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-01-25 15:17:26

您应该使用“运行时”在messaging.js中发送消息

代码语言:javascript
运行
复制
chrome.runtime.sendMessage(message);

另外,在你的背景脚本中,这不是必需的,

代码语言:javascript
运行
复制
chrome.extension.onConnect.addListener()

下面是一个简单的例子

代码语言:javascript
运行
复制
function popupMsg(message) {
    if (message.action == "download") {
        //Do Something
    } else {
        //Something else
    } 
}

chrome.runtime.onMessage.addListener(popupMsg);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48408420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档