为什么JavaScript在除Chrome之外的任何浏览器中执行?

时间:2018-04-16 09:53:04

标签: javascript google-chrome vaadin content-security-policy

我正在使用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])”,那么脚本也会被执行。

有没有人知道这种行为来自哪里?

祝你好运

2 个答案:

答案 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中上传文件。