2

我有一个用例,我必须使用 chrome 扩展程序以编程方式将附件附加到 Gmail 撰写窗口。inboxSDK具有执行此操作的 API,但我不想仅针对这一功能包含一个庞大的库。

我尝试通过在撰写窗口上模拟拖放事件来做到这一点。我以这种方式创建了一个放置事件:

            var fakeDropEvent = new DragEvent('drop');
            Object.defineProperty(fakeDropEvent, 'dataTransfer', {
              value: {files: [blob]}
            });

我给它一个 dataTransfer 属性,该属性具有以Blob对象数组为值的 files 属性。但是在撰写窗口上调度这个事件并没有做任何事情。当我试图捕捉一个正常的 drop 事件(由用户手动触发的)时,我注意到它event.dataTransfer.files有一个FileList对象,而对于我正在制作的假事件,我返回一个 blob 对象数组。我猜这是我面临的问题。Gmail 正在等待,FileList但没有得到它。我试图自己创建一个FileList对象,但没有成功。有什么办法可以实现这样的事情。我试图阅读 inboxSDK 正在做什么,但他们的代码是封闭源代码,几乎不可能理解他们丑陋的代码。

4

1 回答 1

0

这是因为您新创建的 Event 的isTrusted属性设置为 false。当您尝试将事件分派到目标节点时,浏览器会读取此属性并且不执行任何操作。

于 2022-01-20T01:00:03.800 回答