【问题标题】:Is it possible to detect when a user switches tabs?是否可以检测用户何时切换选项卡?
【发布时间】:2011-06-10 14:36:34
【问题描述】:

特别是,我很想知道是否可以捕获用户对不同浏览器选项卡的点击。我想从技术上讲,我可以获得窗口对象的模糊和焦点,但如果有一些与浏览器(IE、FF、Chrome 等)更紧密相关的东西,那就更好了。

【问题讨论】:

    标签: internet-explorer firefox google-chrome browser firefox-addon


    【解决方案1】:

    IE

    如果您正在编写本机代码(即浏览器插件),您可以使用DWebBrowserEvents2::WindowStateChanged

    这里是一些示例代码,用于您的 IDispatch::Invoke() 实现:

        // DWebBrowserEvents2
        case DISPID_WINDOWSTATECHANGED: {
            if (pDispParams) {
                DWORD dwMask  = pDispParams->rgvarg[0].lVal;
                DWORD dwFlags = pDispParams->rgvarg[1].lVal;
    
                // We only care about WINDOWSTATE_USERVISIBLE.
                if (dwMask & OLECMDIDF_WINDOWSTATE_USERVISIBLE)
                {
                    bool visible = !!(dwFlags & OLECMDIDF_WINDOWSTATE_USERVISIBLE));
    
                    // ... your code here ...
                }
            }
            break;
        }
    

    没有向页面的 Javascript 发送显式事件,但 blur 事件可能会执行您想要的操作。

    火狐

    在 Firefox 中,您可以通过为 TabAttrModified 添加事件侦听器并检查 selected 属性来检测 XUL 中的选项卡更改。请参阅MDC documentation for the dealing with the Tabbed Browser

    【讨论】:

    • 这实际上正是我想要的,谢谢!我目前正在为 IE、Chrome 和 FF 编写插件,并且需要这样的东西。是否也可以在 Chrome 或 FF 中执行此操作?
    • 当然可以做到 Firefox (请参阅我的回答中的编辑)。我相信这在 Chrome 中是可能的,但我从来没有这样做过。
    • 非常感谢!这是一个很好的开始。
    • 在 Firefox 中,监听TabSelect 更简单:developer.mozilla.org/en/Code_snippets/…
    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2010-10-25
    • 2013-10-31
    相关资源
    最近更新 更多