我正在使用Vaadin,并希望在单击MenuBar的MenuItem时通过JavaScript执行上传组件的单击。除Chrome之外的任何浏览器都适用。有人提到这是由于Chrome的内容安全政策,但Firefox也有这个,脚本在FF中执行。
该脚本如下所示:
function clickUpload(element) {
// DOM 2 Events
var dispatchMouseEvent = function(target, var_args) {
var e = document.createEvent("MouseEvents");
// If you need clientX, clientY, etc., you can call
// initMouseEvent instead of initEvent
e.initEvent.apply(e, Array.prototype.slice.call(arguments, 1));
target.dispatchEvent(e);
};
dispatchMouseEvent(element, 'mouseover', true, true);
dispatchMouseEvent(element, 'mousedown', true, true);
dispatchMouseEvent(element, 'click', true, true);
dispatchMouseEvent(element, 'mouseup', true, true);
}
menuBar.addItem("Import",
e -> JavaScript.getCurrent().execute("clickUpload(document.getElementsByClassName('gwt-FileUpload')[0])"));
我尝试了其他几种可能性(比如在元素上直接点击()等),任何在FF和Edge中运行良好但在Chrome中不行。如果我在Chrome的控制台中输入“clickUpload(document.getElementsByClassName('gwt-FileUpload')[0])”,那么脚本也会被执行。
有没有人知道这种行为来自哪里?
祝你好运
答案 0 :(得分:1)
如果您碰巧使用Vaadin 8,并且可以进行设计更改,则Vaadin 8中有HTML5文件拖放支持。有关详细信息,请参阅FileDropTarget:
https://vaadin.com/download/release/8.3/8.3.3/docs/api/com/vaadin/ui/dnd/FileDropTarget.html
答案 1 :(得分:0)
这是出于安全原因。我不认为您可以强制用户在Chrome中上传文件。