Javascript 除了更改标题外,如何在firefox中强制另存为对话框?

Javascript 除了更改标题外,如何在firefox中强制另存为对话框?,javascript,firefox,save,Javascript,Firefox,Save,是否有办法强制在ff中为www.example.com/example.pdf创建另存为对话框?(我无法更改标题)我能想到的唯一其他方法是修改Firefox设置。我想你不能这么做 编辑: 我根据数据URI的思想拼凑了一个客户端解决方案。它使用一个 a的修改版本和用于 该脚本下载PDF文件,然后使用base64编码器动态生成并放置数据URI链接 当您需要八位字节流编码但无法访问服务器时(OP的情况似乎就是这样),它应该很有用 注意,我刚刚发布了使用,OP正在使用它进行测试 /** * * Bas

是否有办法强制在ff中为www.example.com/example.pdf创建另存为对话框?(我无法更改标题)

我能想到的唯一其他方法是修改Firefox设置。我想你不能这么做

编辑:

我根据数据URI的思想拼凑了一个客户端解决方案。它使用一个 a的修改版本和用于 该脚本下载PDF文件,然后使用base64编码器动态生成并放置数据URI链接

当您需要八位字节流编码但无法访问服务器时(OP的情况似乎就是这样),它应该很有用

注意,我刚刚发布了使用,OP正在使用它进行测试

/**
*
*  Base64 encode / decode
*  http://www.webtoolkit.info/
*
**/

var Base64 = {

    // private property
    _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

    // public method for encoding
    encode : function (input) {
        var output = "";
        var chr1, chr2, chr2raw, chr3, chr3raw, enc1, enc2, enc3, enc4;
        var i = 0;

        //input = Base64._utf8_encode(input);

        while (i < input.length) {

            chr1 = input.charCodeAt(i++) & 0xFF;
            chr2 = isNaN(chr2raw = input.charCodeAt(i++)) ? NaN : (chr2raw & 0xFF);
            chr3 = isNaN(chr3raw = input.charCodeAt(i++)) ? NaN : (chr3raw & 0xFF);

            enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;

            if (isNaN(chr2)) {
                enc3 = enc4 = 64;
            } else if (isNaN(chr3)) {
                enc4 = 64;
            }

            output = output +
            this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
            this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

        }

        return output;
    }
}



// http://web.archive.org/web/20071103070418/mgran.blogspot.com/2006/08/downloading-binary-streams-with.html
//fetches BINARY FILES synchronously using XMLHttpRequest

load_url = function(url) {
    var req = new XMLHttpRequest();
    req.open('GET',url,false);
    //XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]
    req.overrideMimeType('text/plain; charset=x-user-defined');
    req.send(null);

    if (req.status != 200){
    alert(req.status);
    return '';
    }
    return req.responseText;
}

    function getDataURI(filename)
    {
    var file =  load_url(filename);
    var uueFile = Base64.encode(file);
    var uri = 'data:application/octet-stream;base64,' + encodeURIComponent(uueFile);
    return uri;
    }

 window.addEventListener("load",
                      function()
                      {
                        var link = getDataURI("foo.pdf");
                        document.getElementById("myDiv").innerHTML += '<a href="' + link + '"><code>' + link +  '</code></a><br><br>';
                      }

如果可以将文件输出到base64中的客户端,则可以使用数据URI来下载

location.href = 'data:application/octet-stream;base64,' + appendPDFContentHere
OR
<a href="data:application/octet-stream;base64,appendPDFContentHere">pdf</a>
location.href='数据:应用程序/八位字节流;base64,“+appendPDFContentHere
或
不过,这只适用于非IE浏览器,但正如您对firefox的要求,这应该可以很好地工作

编辑:

下面的两个示例都包含制作PNG的字节。如果单击第一个图标,您可以像在浏览器中一样查看图像。但是,如果您单击第二个链接,它将强制您下载图像。将其另存为.png,您将看到它们是完全相同的图像。这两个链接的唯一区别是mime类型

()--mime类型:image/png

()--mime类型:应用程序/八位字节流


您询问用什么代替appendPDFContentHere,答案是构成PDF的base64编码字节。我在网上用它对示例中使用的图像进行编码。

@raj:这正是标题的用途。响应主体是内容,标题是如何处理它的建议(例如内容处置),感谢您的解决方案。我试着使用代码。下面是我使用的代码的底部:window.addEventListener(“load”,function(){var link=getDataURI(“);document.getElementById(“myDiv”).innerHTML+='

';}hello很遗憾,html文件中除了hello这个词外没有其他内容。没有pdf。我还需要其他内容吗?在我使用的链接中““。我在该链接前面有http,但只是将其转换为没有http的链接。首先,您只能在自己的服务器上执行XMLHttpRequest调用。因此,请将PDF复制到与HTML页面相同的服务器上,然后重试。如果仍然不起作用,请启用JavaScript错误检查,并告诉我们您遇到了哪些错误。我应该输入什么“在此附加PDF内容”?整个PDF?不,如果只添加URL,则无法添加mimetype(应用程序/八位字节流).@Tom:预览链接仍然有效,单击底部的“继续”也有效。看起来直接链接不知怎么断了。@fearphage:对不起,几天前我试过它时,它对我不起作用;我不知道是什么问题,但现在确实起作用了。谢谢!