Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome extension 如何确定用户是否正在拖动选项卡_Google Chrome Extension - Fatal编程技术网

Google chrome extension 如何确定用户是否正在拖动选项卡

Google chrome extension 如何确定用户是否正在拖动选项卡,google-chrome-extension,Google Chrome Extension,我试图弄清楚,如果一个用户正在拖动一个标签,任何标签。我不在乎它是哪个标签,我只需要知道,是否有任何标签被拖动 最好的方法是什么 请注意:我问。但是,在另一个问题中,我想知道,何时停止拖动以便执行移动操作。这里给出的解决方案(重试直到成功)似乎不适用于这个新问题。无法判断是否有任何选项卡被“拖动”(=在选项卡上按住鼠标按钮) 如果您想知道标签拖动已经发生(与“即将发生”相反),那么您可以使用(在标签内移动)和/或/事件。我基于Chrome不允许在包含当前正在拖动的标签的窗口中移动标签这一事实构建

我试图弄清楚,如果一个用户正在拖动一个标签,任何标签。我不在乎它是哪个标签,我只需要知道,是否有任何标签被拖动

最好的方法是什么


请注意:我问。但是,在另一个问题中,我想知道,何时停止拖动以便执行移动操作。这里给出的解决方案(重试直到成功)似乎不适用于这个新问题。

无法判断是否有任何选项卡被“拖动”(=在选项卡上按住鼠标按钮)


如果您想知道标签拖动已经发生(与“即将发生”相反),那么您可以使用(在标签内移动)和/或/事件。

我基于Chrome不允许在包含当前正在拖动的标签的窗口中移动标签这一事实构建了一个解决方案。 在这种情况下,
chrome.runtime.lastError.message
将被删除,此时无法编辑
选项卡(用户可能正在拖动选项卡)

我通过获取聚焦窗口的第一个选项卡并将其移动到其索引来利用它。因为我使用它自己的索引,所以当操作成功时,实际上没有视觉变化

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
构建了一个轮询机制,定期检查用户是否仍在拖动,并在用户停止拖动时执行操作


可以看到完整的实现,它使用了helper类。

这很遗憾。我真的需要知道当前是否正在进行拖动。我的分机正在为每个新窗口添加选项卡。当用户将选项卡拖出窗口时,将创建一个新窗口。我的扩展检测到这一点,并创建其选项卡。但是,这会停止拖动,如果一路上创建了一个新窗口,则无法将选项卡拖动到另一个窗口,即使该窗口是临时的:因此,我需要排队等待扩展逻辑,直到拖动停止。@DanielHilgarth您可以使用OnAttached事件检测新窗口是分离选项卡的结果,并等待用户与页面交互(例如,通过内容脚本中的焦点/输入事件),然后再插入新选项卡。这是一个很好的解决办法,但似乎比破坏标签拖动功能要好。谢谢你的建议。我会看看这是否有效。我也在根据你昨天的回答做一些事情。我正在将焦点窗口中的选项卡移动到其索引,即不会有可见的移动。但是,如果用户正在拖动选项卡,则返回与昨天相同的错误
此时无法编辑选项卡(用户可能正在拖动选项卡)
。我将尝试两者结合使用。顺便说一句:此错误消息始终是英文还是浏览器语言?@DanielHilgarth此消息始终是英文。这里有定义:如果你感兴趣的话,我只是发布了我的发现。