残情 发表于 2024-4-27 13:31:20

关于调用下载,怎么调用浏览器下载修改文件名

GM_download下载时默认下载吗,看不到进度,调用了多少次都不知道,结果后面发现下载了一大堆。

示范:https://rd-sycdn.kuwo.cn/c8376eaa3b09357dc36b6513393f5855/662c8c40/resource/m3/13/26/2683817674.mp4

请问怎么调用浏览器的下载,比如下载上面这个链接,直接在浏览器打开他会进入播放,而不会跳转到下载,想实现调用浏览器下载,并且自动改名为:一定要爱你.mp4,请问怎么调用。

zip11 发表于 2024-4-27 15:22:59

本帖最后由 zip11 于 2024-4-27 15:45 编辑

> 本帖最后由 zip11 于 2024-4-27 15:44 编辑

必须是前台脚本,模拟 点击 链接,调用游览器自带下载器,
```

// ==UserScript==
// @name         video-down-2
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1.0
// @descriptiontry to take over the world!
// @author       You
// @match      https://bbs.tampermonkey.net.cn
// @grant       GM_xmlhttpRequest
// @connect   https://media.w3.org/*
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
   
    // 定义下载文件函数
    function downloadFile(url, fileName) {

      // 发送 GM_xmlhttpRequest 请求
      GM_xmlhttpRequest({
            method: "GET",
            url: url,
            responseType: "blob", // 将响应类型设置为 blob
            onload: function(response) {
                // 创建 blob 对象
                var blob = new Blob(, { type: response.response.type });

                // 创建下载链接
                var url = window.URL.createObjectURL(blob);

                // 创建 a 标签并设置下载链接及文件名
                var a = document.createElement("a");
                a.href = url;
                a.download = fileName;

                // 模拟点击下载
                a.click();

                // 释放 blob 对象
                window.URL.revokeObjectURL(url);
            },
            onprogress: function(event) {
                // 获取下载进度信息
                var percentComplete = (event.loaded / event.total) * 100;
                console.log("下载进度:" + percentComplete.toFixed(2) + "%");
            },
            onerror: function(error) {
                console.error('下载文件失败:', error);
            }
      });
    }

    // 调用下载文件函数并传入 URL 和自定义文件名
    downloadFile('https://media.w3.org/2010/05/sintel/trailer.mp4', 'trailer.mp4');


})();

```

残情 发表于 2024-4-27 17:20:39

zip11 发表于 2024-4-27 15:22
> 本帖最后由 zip11 于 2024-4-27 15:44 编辑

必须是前台脚本,模拟 点击 链接,调用游览器自带下载 ...

还是不能下载呢,@connect也有啊


!(data/attachment/forum/202404/27/172022libxw5orwwkyaawd.jpg)

zip11 发表于 2024-4-27 17:24:52

残情 发表于 2024-4-27 17:20
还是不能下载呢,@connect也有啊




看你的报错图片的英文说是 域名没有在 connect list,我用 脚本猫 可以正常下载,再试试 更换游览器

残情 发表于 2024-4-27 19:53:21

zip11 发表于 2024-4-27 15:22
> 本帖最后由 zip11 于 2024-4-27 15:44 编辑

必须是前台脚本,模拟 点击 链接,调用游览器自带下载 ...

不模拟点击也行,创建一个按钮点击,电击事件怎么写呢,默认浏览器下载,而且需要命名下载

zip11 发表于 2024-4-27 20:33:32

本帖最后由 zip11 于 2024-4-27 21:00 编辑

点击事件,核心功能还是 模拟点击,只是调用方式不同
创建一个按钮点击,

默认浏览器下载,命名下载
```

// ==UserScript==
// @name         Insert Button Example
// @namespace    http://your.namespace.com
// @version      0.1
// @descriptionInsert a button into the page and simulate a download when clicked
// @author       Your Name
// @match      https://example.com/*
// @grant      GM_xmlhttpRequest
// @connect      bbs.tampermonkey.net.cn
// ==/UserScript==

(function() {
    'use strict';

    // 创建按钮元素
    var button = document.createElement("button");
    button.textContent = "点击下载";

    // 将按钮插入到页面中
    document.body.appendChild(button);

    // 定义按钮点击事件处理函数
    function handleClick(event) {
      // 发送 GET 请求以模拟下载
      GM_xmlhttpRequest({
            method: "GET",
            url: "https://example.com/download/file.zip",
            responseType: "blob", // 设置响应类型为二进制数据
            onload: function(response) {
                // 创建临时链接并模拟点击下载
                var url = URL.createObjectURL(response.response);
                var a = document.createElement("a");
                a.href = url;
                a.download = "file.zip";
                document.body.appendChild(a);
                a.click();
                // 下载完成后清除临时链接
                URL.revokeObjectURL(url);
                // 移除临时链接元素
                document.body.removeChild(a);
            }
      });
    }

    // 将点击事件处理函数绑定到按钮的点击事件上
    button.addEventListener("click", handleClick);
})();


```

残情 发表于 2024-4-28 13:15:57

zip11 发表于 2024-4-27 20:33
点击事件,核心功能还是 模拟点击,只是调用方式不同
创建一个按钮点击,



大佬,测试了,好像还是要下载完成了(缓存完成了)才会进入下载列表,和GM_DOWNLOAD一样,遇到大文件就不知道下载状态

残情 发表于 2024-4-28 13:19:17

而且好像还不能离开关闭页面
页: [1]
查看完整版本: 关于调用下载,怎么调用浏览器下载修改文件名