gpt4 book ai didi

javascript - 在 Internet Explorer 中使用 Javascript 调用 C++

转载 作者:可可西里 更新时间:2023-11-01 13:26:05 24 4
gpt4 key购买 nike

我在 BHO 扩展中看到过这种情况,其中 JavaScript 可以调用 C++ BHO 中的函数。但是假设我没有使用 BHO,而是我有一个 C++ 控制台应用程序创建一个 IE COM 对象,如下所示:

HRESULT hr = CoCreateInstance(
CLSID_InternetExplorer,
NULL,
CLSCTX_LOCAL_SERVER,
IID_IWebBrowser2,
(void**)&_cBrowser);

我还有一个类“拥有”从该函数返回的 IWebBrowser2 对象。

class BrowserWrapper{
public:
CComPtr<IWebBrowser2> pBrowser;

void SomeFunction(...)
}

有没有办法从生成的 IWebBrowser2 对象中的 JavaScript 调用包装类中的“SomeFunction”之类的函数?

最佳答案

您必须实现 IDocHostUIHandler interface并使用类似于此的代码(从文档中提取)将其设置到网络浏览器:

ComPtr<IDispatch> spDocument;
hr = spWebBrowser2->get_Document(&spDocument);
if (SUCCEEDED(hr) && (spDocument != nullptr))
{
// Request default handler from MSHTML client site
ComPtr<IOleObject> spOleObject;
if (SUCCEEDED(spDocument.As(&spOleObject)))
{
ComPtr<IOleClientSite> spClientSite;
hr = spOleObject->GetClientSite(&spClientSite);
if (SUCCEEDED(hr) && spClientSite)
{
// Save pointer for delegation to default
m_spDefaultDocHostUIHandler = spClientSite;
}
}

// Set the new custom IDocHostUIHandler
ComPtr<ICustomDoc> spCustomDoc;
if (SUCCEEDED(spDocument.As(&spCustomDoc)))
{
// NOTE: spHandler is user-defined class
spCustomDoc->SetUIHandler(spHandler.Get());
}
}

您必须具体实现 GetExternal method

现在,在 IE 的 javascript(或 vbscript)中,您可以通过这样的调用访问您的主机:

var ext = window.external; // this will call your host's IDocHostUIHandler.GetExternal method
ext.SomeFunction(...); // implemented by your object

您在 GetExternal 中返回的必须是一个IDispatch 对象,您可以按照自己的方式进行设计。

关于javascript - 在 Internet Explorer 中使用 Javascript 调用 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36853411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com