如何在C ++中将鼠标事件侦听器附加到嵌入式nsIWebBrowser

时间:2009-08-28 10:48:56

标签: xpcom gecko

我在我的应用程序中嵌入了一个nsIWebBrowser。因为我只是为它动态生成HTML,所以我使用OpenStream,AppendToStream和CloseStream来添加内容。我需要的是为Web浏览器上的鼠标移动添加事件监听器以及鼠标点击。我已经阅读了文档并尝试了许多不同的东西,但我尝试过的任何东西都没有用。例如,下面的代码似乎做了正确的事情,但它没有做任何事情:

    nsCOMPtr<nsIDOMWindow> domWindow;
    mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));

    if (!mEventTarget) {
    mEventTarget = do_QueryInterface(domWindow);

    if (mEventTarget)
        mEventTarget->AddEventListener(NS_LITERAL_STRING("mouseover"), (nsIDOMEventListener *)mEventListener, PR_FALSE);
}

可能它不起作用,因为它在初始化期间运行,但在实际添加任何内容之前。但是,如果我在AppendStream或CloseStream中添加它,则会发生段错误。

请告诉我一个直截了当的方法。

1 个答案:

答案 0 :(得分:2)

嗯,这是答案:

nsCOMPtr<nsIDOMEventTarget> cpEventTarget;
nsCOMPtr<nsIDOMWindow> cpDomWin;
m_pWebBrowser->GetContentDOMWindow (getter_AddRefs(cpDomWin));
nsCOMPtr<nsIDOMWindow2> cpDomWin2 (do_QueryInterface (cpDomWin));
cpDomWin2->GetWindowRoot(getter_AddRefs(cpEventTarget));

rv = cpEventTarget->AddEventListener(NS_LITERAL_STRING("mousedown"),
                m_pBrowserImpl, PR_FALSE);