【发布时间】:2011-11-25 19:12:41
【问题描述】:
我转到该页面,它有 1 个 zip 文件,但我不知道名称,除了 .zip。
我想让 Greasemonkey 自动下载这个 zip,也许使用 flashgot 或其他什么?
所以我需要它在页面加载时激活,然后查找*.zip,并自动将其添加到下载中。
有什么想法吗?
【问题讨论】:
标签: javascript greasemonkey download
我转到该页面,它有 1 个 zip 文件,但我不知道名称,除了 .zip。
我想让 Greasemonkey 自动下载这个 zip,也许使用 flashgot 或其他什么?
所以我需要它在页面加载时激活,然后查找*.zip,并自动将其添加到下载中。
有什么想法吗?
【问题讨论】:
标签: javascript greasemonkey download
Greasemonkey 本身无法自动将 zip 文件或其他任何内容保存到本地文件系统。
这是设计使然;允许用户/页面 JavaScript 保存文件是一种已证明的安全灾难。
您的选择:
GM 可以做的是弹出文件-保存对话框以获取正确的文件:
仍然需要用户交互,只要单击一下即可。
例如,假设页面包含此链接:
<a href="http://Suspicious.com/TotallyOwnYourBankAndCreditCardAccounts.zip">
Click me, sucka!
</a>
然后这段代码将为它打开文件保存对话框:
var clickEvent = document.createEvent ('MouseEvents');
var firstZipFile = document.querySelector ("a[href*='.zip']");
clickEvent.initEvent ('click', true, true);
firstZipFile.dispatchEvent (clickEvent);
Greasemonkey 可以使用GM_xmlhttpRequest() 将文件发送到您的网络应用程序——您必须自己编写。然后,Web 应用程序可以自动将文件保存到服务器。您可以将本地计算机设置为服务器。
有关此方法的更多帮助,请read this,然后提出一个新问题。
如果您决定采用 Firefox 插件路线,请参阅 "MDN: Downloading files"。
有关此方法的更多帮助,请read this,然后提出一个新问题。
【讨论】:
这是我在 greasmonkey 中使用的代码,用于从@include 语句中 url 提供的位置下载 zip 文件。
// ==UserScript==
// @name zipexport
// @namespace refresh page
// @include https://control.com/export.php
// @version 1
// @grant none
// ==/UserScript==
var timerVar= setInterval(function() {DoMeEverySecond (); }, 60000);
function DoMeEverySecond ()
{
setInterval('window.location.reload()',10000);
$(document).ready(function()
{
setTimeout(function(){
document.getElementsByClassName("btn btn-lg btn-primary")[0].click();
}, 1000);});
}
要了解一些想法,请通过这个..
// @include https://control.com/export.php
在此处使用源页面的链接
setInterval(function() {DoMeEverySecond (); }, 60000);
帮助你调用函数DoMeEverySecond(); 60000ms(60s=1min)后
setInterval('window.location.reload()',10000);
用于每 10 秒重新加载一次页面。我使用它只是为了确保网页更新到最新状态(我有一个文件要下载,每小时更新一次)。如果您不需要,您可以避免。
$(document).ready(function()
如果我们使用这个语句,function()只有在完全重新加载网页后才会被调用。
document.getElementsByClassName("btn btn-lg btn-primary")[0].click();
getElementsByClassName/getElementsById 等可以在此处使用,具体取决于可以指向您要下载的文件的内容(通过在源页面中右键单击来使用检查元素,以了解哪个类/id 是否可以指向您的 zip 文件) .
[0] 如果您在同一个类中有多个要调用的变量,可能会对您有所帮助。
click()
在指定的元素上执行鼠标点击。(这应该有助于下载文件)
【讨论】: