问题
当前,要开始拖放文件,你需要调用 WebContents.startDrag({ file:<path>, icon:<path> })
。这将生成以下 DataTransfer 对象:
DataTransfer {
dropEffect: 'none',
effectAllowed: 'copyLink',
files: FileList,
items: DataTransferItemList,
types:['Files',..]
}
其中 FileList
包含正确的文件(s)。
问题在于 effectAllowed
,当设置为 'copyLink'
时,它将不允许从 Electron BrowserWindow 拖放到 Discord 等应用程序中,因为它们只允许具有“移动”效果的拖放项。
解决方案
我建议允许更改默认值从 'copyLink' 更改为 'copyMove' ,或者允许用户将拖放效果作为参数传递给 WebContents.startDrag
。
文件更改
drag_utils_views.cc (第 20 行) - 为 DragFileItems
添加一个参数以接受拖放类型(应该是一个整数,Chromium 的 DragOperation
在此处定义)。
drag_utils_views.cc (第 45 行) - 将 ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK
更改为传递给函数的变量。
drag_utils.h (第 18 行) - 为 DragFileItems
添加一个参数以接受拖放类型。
drag_util_mac.mm (第 28 行) - 可能需要为 DragFileItems
添加一个参数以接受拖放类型,以便与 MACOSX 兼容。(我没有看到如何在 osx 上更改拖放类型,如果他们像 windows 那样使用拖放类型的话。)
atom_api_web_contents.cc (第 1736 行)- 从 item
获取拖放类型,如下所示:
int item;
if (!item.Get("dropType", &item)) {
item = <some default drop type value, like ui::DragDropTypes.DRAG_COPY | ui::DragDropTypes.DRAG_LINK as it was previously>
}
atom_api_web_contents.cc (第 1754 行)- 为拖放类型传递参数。
结果
现在可以使用 WebContents.startDrag 的示例用法如下:
contents.startDrag({
file: 'C:/example/file.png',
icon: 'myico.png',
dropType: 3, // 3 for copyMove
})
3条答案
按热度按时间jhkqcmku1#
你好!感谢在这里发布第一个问题!如果你在报告一个🐞 bug,请确保你包括重现它的步骤。我们在这个仓库里收到了很多问题,所以请耐心等待,我们会尽快回复你。
为了帮助我们更容易地调查你的问题,请按照 contributing guidelines 进行操作。
xvw2m8pv2#
@mattetti两年前(来自#4622)首次实现了WebContents.startDrag函数。
@zcbenz似乎也参与了其中。
你们知道是否可以将拖放类型从复制链接更改吗?
h6my8fg23#
无法按住修饰键(Alt,Cmd等)来控制拖动的类型(复制、移动、链接等)吗?