当用户单击 fineuploader 按钮时,如何重定向它们而不是显示文件选择对话框?

When a user clicks the fineuploader button, how can I redirect them instead of showing the file selection dialog?

我们正在使用 .net 和 fineuploader。如果用户会话超时并且他们单击了 fineuploader 按钮,我们需要能够将他们重定向到登录页面而不是向他们显示文件选择对话框。

我们已经能够在 fineuploader 的 "submit" 事件中进行排序,但用户在执行我们的重定向之前仍然会看到文件选择对话框。

$("#fine-uploader").fineUploader().on("submit", function (event, id, name) 
{
  if (noSession){
    cancelUploads();
    window.onbeforeunload = function () { return; }
    location.href = "/login";
  }
}

我没有看到在文件选择对话框之前触发的任何事件,除非我错过了它 (http://docs.fineuploader.com/api/events.html)。

有没有办法在显示文件选择对话框之前做一些事情?

您可以使用 prevent default 来停止提交操作和 运行 您的检查。 如果他们已登录,请使用 else 语句完成提交。

$("#fine-uploader").fineUploader().on("submit", function (event, id, name) 
{  event.preventDefault();
  if (noSession){
        cancelUploads();
        window.onbeforeunload = function () { return; }
        location.href = "/login";
      }
  else{
        return true;
      }
}

https://api.jquery.com/event.preventdefault/

解决方案可能就像将点击处理程序附加到基础文件输入元素一样简单,防止浏览器在点击时的默认操作(通常显示文件选择器),并且然后将用户重定向到您选择的页面:

document.querySelector('input[type="file"]')
   .addEventListener('click', function(event) {
      event.preventDefault()
      location.href = "/login"
   })

要重定向时添加此事件处理程序,不需要时将其删除。或者,您可以在创建上传器后添加它,并向点击处理函数添加一些逻辑,仅阻止默认操作并在用户必须重新登录时重定向。

警告:我没有测试过这个跨浏览器(仅Chrome)。