Html / css:与实际链接不同的“下载链接文件...”

时间:2012-01-17 21:00:09

标签: html download

我对整个html语言都很陌生(最近开始建立我自己的网站)。

让我描述一下我的问题:

我有一种文件树看菜单设置,允许用户浏览我的网站。其中的每个项目都是指向html页面的链接,该页面包含使用syntaxhighlighter突出显示的文件版本:

<a href="files/hl_file.html" target="content_page">file.cpp</a>

然而,我希望用户能够右键单击此链接并使用“另存为...”菜单来保存文件本身。我现在设置的方式不允许这样做,因为右键单击保存只会保存突出显示的html文件hl_file.html,而不是file.cpp

在上面的代码"content_page"中,iframe实际上包含整个网页。

有没有办法在处理右键单击下载的href中构建一些额外的内容?

2 个答案:

答案 0 :(得分:3)

没有用于直接下载的特殊href,但您可以尝试使用自定义菜单替换右键菜单,该菜单包含您要公开的下载的链接:

演示:http://labs.abeautifulsite.net/archived/jquery-contextMenu/demo/

via:http://www.abeautifulsite.net/blog/2008/09/jquery-context-menu-plugin/

将您的HTML设置为: <a href="..." data-downloadhref="...">File</a>

然后在你的“下载”回调中使用: document.location = $(el).data('downloadhref')

编辑:这使用jQuery,因此您需要使用并熟悉它才能使其正常运行。您可能会找到一个类似的,无jQuery的脚本。只需谷歌浏览Javascript Context Menu

答案 1 :(得分:1)

将所有链接放在特殊类中的代码中(例如.syntax)。然后,您可以使用以下代码更改元素的行为:

<!DOCTYPE html>
<html>
<title>basic demo</title>
<script>
window.addEventListener('load',function(){
    // run this function when the website is loaded completly
    // use DOMContentLoaded if you prefer to load it earlier.
    for(var i=0, p; p = document.querySelectorAll('a.syntax')[i];++i){
            // this will run through all anchor tags tagged with the class 'syntax'
        p.oldhref = p.href; // save old href
        p.addEventListener('mousedown',function(e){
                    // Capture mouse events
            if(e.button === 2) // Check for right click
                this.href = this.firstChild.data; // Right click
                // Please ensure that your a tag contents the correct link.
                // If not, alter it to 'src/' + this.firstChild.data
                // or whatever your src directory is.
            else
                this.href = this.oldhref; // left click, use original href
        },false);
    }
},false);
</script>
<body>
<a href="http://google.de" class="syntax">http://stackoverflow.com</a>
</body>
</html>

这不会改变浏览器的行为,因为它只是改变了URL。见http://jsfiddle.net/wHB3m/1/