使用javascript多次提交表单以下载多个文件?

时间:2011-04-30 19:07:02

标签: javascript iframe download

嘿,伙计们,情况如下:

我有一个带有两个参数的URL并返回一个PDF文件。我也可以将带有两个输入值的表单发布到此URL。

在另一个页面上,我想触发一个javascript,它将通过GET或POST向URL发送不同的参数组合,并返回与参数组合相关的每个文件。

基于我在这里找到的另一个脚本,我对其进行了调整并尝试了这个(URL匿名化):

var first = '503113571';
var second = '2046486463';
var url = 'https://www.domain.com/page';

el = document.createElement( 'div' );
el.setAttribute( "id", "targetdiv" );
document.body.appendChild( el );

function download(first, second)
{
    var htm = '<iframe src="' + url + '?a=' + first + '&b=' + second + '"></iframe>';
    document.getElementById('targetdiv').innerHTML = htm;
}

download(first, second);

iframe是在div中创建的,其src属性是正确的 - 如果我将src属性复制并粘贴到一个新窗口,该文件下载正常。出于某种原因,当在iframe中使用此URL时,永远不会加载该文件。

我正在使用GreaseMonkey在页面上运行脚本,因为我们无权更改实际的网页本身。脚本运行正常(所有代码都运行,正确创建iframe)。

使用FireBug的.NET面板,页面加载后,我没有看到对iframe src的任何请求。

任何想法,无论是在原因上,还是我可以采取哪些步骤来弄明白?谢谢!

1 个答案:

答案 0 :(得分:1)

一些事情:

  1. 您只能以这种方式执行GET请求,并且您没有使用传递给下载函数的参数。
  2. 我通常会将代码粘贴到Firebug控制台中进行测试。
  3. 您应该只需设置 window.location 即可下载文件。

    var first = '503113571';
    var second = '2046486463';
    var url = 'https://www.domain.com/page';
    
    function download(a, b) {
        window.location = url + '?a=' + a + '&b=' + b;
    }
    
    download(first, second);
    
  4. 如果你想使用 iframe ,这应该没有转到其他页面的风险:

    function download(a, b) {
        var newIFrame = document.createElement("iframe");
        newIFrame.src = url + '?a=' + a + '&b=' + b;
        newIFrame.style.display = 'none';
        document.body.appendChild(newIFrame);
    }