javascript - 门控资产 - 提交表单后自动加载变量 URL
问题描述
我有 5 个按钮,可直接下载不同资产(PDF 和其他文件类型)的 URL。
我希望用户单击一个按钮来下载资产,然后显示一个门控弹出表单,必须填写该表单才能访问资产 URL。
提交表单后,onSubmit 会自动加载资产 URL。
我应该如何去完成这个?
我正在使用嵌入到网页弹出/模式中的 Marketo 表单。
我曾经data-toggle="modal" data-target="#myModal"
让下载按钮在单击时打开模式/弹出窗口,这很有效。我的代码如下所示:
<a href="https://example.com/download.pdf" onclick="VSCapture('Download PDF'); loadfile('https://example.com/download.pdf');" data-toggle="modal" data-target="#myModal" style="margin-bottom: 20px;">Download PDF</a>
提交表单而不是单击后,如何开始下载?我假设我需要传递变量,但我不确定如何编码。有什么想法吗?谢谢。
解决方案
如果你真的希望它得到保护,你应该真正控制这个服务器端。不要在页面上包含 pdf 的 url,而是有一个带有提交按钮的表单。表单将发布到服务器,服务器将验证发布的数据,如果一切顺利,redirect
用户将访问 pdf 的 url。这种设计意味着用户在不提交有效表单的情况下不可能知道 pdf 的 url。
您如何进行服务器端重定向取决于您的 Web 框架。例如,如果您使用的是 Ruby on Rails,您将使用该redirect_to
方法告诉客户端要导航到的 URL。例如:redirect_to('https://www.google.com')
总而言之,这将使用带有Location
URL 标头的 302 状态来告诉浏览器下一步该去哪里。
如果您<a>
像在帖子中那样构建标签,任何人都可以右键单击并在新选项卡中打开您的链接,完全绕过您的 javascript 表单。如果您将 url 烘焙到数据属性或您的 javascript 文件中,普通人将更难弄清楚,但任何了解 Web 编程的人仍然可以轻松绕过它而无需填写表格。
归根结底,你只能做很多事情来让人们保持诚实。理想情况下,您的服务器每次都会构建某种短暂的 URL,以使人们很难将链接粘贴到彼此之间。但如果人们想窃取,他们只会分享 pdf。盗版是不可能打击的,但你可以通过让欺骗系统变得更难一些来尽力帮助诚实的人保持更诚实。
推荐阅读
- javascript - 我的 Javascript 似乎只适用于我在 Laravel foreach 循环中的第一个条目
- c# - 如何创建 0 输出的 2d 数组任务问题
- javascript - 如何在 Storybook 中显示 Vue 组件
- ruby-on-rails - 安装特定版本的 sqlite3
- rust - 不能借 x 为可变的,因为它也借为不可变的
- java - 如何用新收到的通知替换旧通知,而不是在通知托盘中创建一堆通知?
- c++ - 为什么分离线程没有输出消息?
- ios - 不了解 Apple Doc
- git - 多项目 Git 存储库的 CI/CD
- javascript - 是否可以监听另一个组件的卸载生命周期