我有一个用例,我必须使用 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 正在做什么,但他们的代码是封闭源代码,几乎不可能理解他们丑陋的代码。