我有一个用例,其中我必须使用Chrome扩展程序以编程方式将附件附加到Gmail撰写窗口。 inboxSDK具有执行此操作的API,但我不想为此功能提供一个庞大的库。
我尝试通过在撰写窗口上模拟拖放事件来做到这一点。我以这种方式创建放置事件:
var fakeDropEvent = new DragEvent('drop');
Object.defineProperty(fakeDropEvent, 'dataTransfer', {
value: {files: [blob]}
});
我给它一个dataTransfer属性,它具有files属性,其中包含Blob
个对象数组作为值。但是在compose窗口上调度此事件不会执行任何操作。
当我尝试捕获普通的放置事件(由用户手动触发的事件)时,我注意到它的event.dataTransfer.files
有一个FileList对象,而对于我正在制作的假事件,我返回了一个Blob对象数组。我猜这是我面临的问题。 Gmail期望使用FileList
,但没有收到。
我尝试自己创建一个FileList
对象,但未成功。有什么办法可以实现这样的目标。
我试图阅读inboxSDK在做什么,但是他们的代码是封闭源代码,几乎不可能理解他们的丑陋代码。