我想弄清楚,如果用户拖动标签,任何标签。我不关心它是哪个标签,我只需要知道,是否有任何标签被拖动。
这样做的最佳方式是什么?
请注意:我问a similar question。然而,在我想知道的另一个问题中,当拖动停止时我可以执行我的移动操作。那里给出的解决方案(重试直到它起作用)似乎并不适用于这个新问题。
答案 0 :(得分:2)
无法判断是否有任何标签被“拖动”(=在标签上按住鼠标按钮)。
如果您想知道标签拖动发生(反对“即将发生”),那么您可以使用chrome.tabs.onMoved
(在标签内移动)和/或chrome.tabs.onAttached
/ chrome.tabs.onDetached
事件。
答案 1 :(得分:0)
我基于以下事实构建了一个解决方案:Chrome不允许在包含当前被拖动的标签的窗口中移动标签。
在这种情况下,chrome.runtime.lastError.message
将为Tabs cannot be edited right now (user may be dragging a tab)
。
我通过获取焦点窗口的第一个选项卡并将其移动到索引来利用它。因为我使用自己的索引,所以当操作成功时,实际上并没有视觉上的变化。
var Chrome = {
isUserDragging: function (callback) {
chrome.windows.getAll({ populate: true }, function (windows) {
var window = windows.filter(function (x) {
return x.type === 'normal' && x.focused && x.tabs
&& x.tabs.length;
})[0];
if (window === undefined)
return;
var tab = window.tabs[0];
chrome.tabs.move(tab.id, { index: tab.index }, function () {
callback(
chrome.runtime.lastError !== undefined &&
chrome.runtime.lastError.message.indexOf('dragging') !== -1);
});
});
}
}
用法是:
Chrome.isUserDragging(function(userIsDragging) {
if(userIsDragging)
// do something
else
// do something else
});
现在,基于此,我使用setTimeout
构建了一个轮询机制,当用户停止拖动时,我会定期检查用户是否仍在拖动并执行操作。