我想知道我触发上下文菜单的图像的网址(Internet Explorer)

时间:2013-12-02 13:46:51

标签: javascript contextmenu activexobject

我按照此来源的说明操作:http://www.codeguru.com/cpp/com-tech/atl/atl/article.php/c11007/Customize-an-IE-Context-Menu-to-Add-CodeGuru-Favorites.htm 添加上下文菜单项并通过Javascript调用ActiveX控件的方法。这是重要的部分:

<SCRIPT LANGUAGE="JavaScript">
var parentwin = external.menuArguments; 
var doc = parentwin.document;
var str = new String(parentwin.event.srcElement.name);
var oFav = new ActiveXObject("CodeguruFavorites.CGFavorites");
oFav.ShowDefaultContextMenu(parentwin,doc.title, doc.location);
</SCRIPT>

在此示例中,作者向ActiveX方法发送网页标题和我触发上下文菜单的网页的URL。

我想知道如何获取触发上下文菜单的图像的URL。

1 个答案:

答案 0 :(得分:0)

我在这篇文章中找到了答案:How can one identify the currently clicked link with Javascript?

触发上下文菜单的对象是menuArguments.event.srcElement。它作为IDispatch接口指针传递给ActiveX控件的方法。在此指针上,您可以调用QueryInterface以获取指向IHTMLImgElement的指针。

pDispatch->QueryInterface(IID_IHTMLElement,(void**)&lpElement);
if (lpElement)
{
    CComBSTR tagName;

    lpElement->get_tagName(&tagName);

    if(0 == wcsicmp(tagName.m_str, L"img"))
    {
        CComPtr<IHTMLImgElement> spImg;

        lpElement->QueryInterface(IID_IHTMLImgElement, (void**)(&spImg));

        if(spImg)
        {
            CComBSTR src;

            HRESULT hr = spImg->get_src(&src);
            if(FAILED(hr))
                return hr;
        }
    }
}