gpt4 book ai didi

c# - BHO 在每个页面上执行 JavaScript

转载 作者:行者123 更新时间:2023-11-28 07:22:54 24 4
gpt4 key购买 nike

我正在为 Internet Explorer (BHO) 编写扩展程序。我阅读了很多问题和答案,但无法找到和理解,如何在每个页面上从资源中执行 Javascript 文件?不附加网页,需要在每个页面上执行必要的JS。

我知道,我需要在 OnDocumentComplete 之后执行,但我不知道,如何在 C++ 中执行此操作...我找到了这个扩展,但它是用 C# 编写的,我无法将它转换为 C++。:

https://github.com/dvdotsenko/livereload_ie_extension

我有 C++ 中的 BHO 示例: http://www.codeproject.com/Articles/37044/Writing-a-BHO-in-Plain-C

你能帮我在每个页面上添加从资源中执行 JavaScript 吗?

最佳答案

您正在寻找IHTMLWindow2::execScript .

您可以通过执行以下操作获取 IHTMLDocument2 指针:

  1. 调用IWebBrowser2::get_Document()
  2. QueryInterface() IID_IHTMLDocument2 的结果 IDispatch 指针。

您应该能够通过在 IHTMLDocument2 对象上调用 get_parentWindow 并执行类似的操作来获取 IHTMLWindow2 指针。

以下是一些示例函数。您必须实现 IObjectWithSite 并缓存您的站点指针。您可以将其传递给这些函数。

HRESULT Web2FromSite(IUnknown *punkSite, IWebBrowser2 **pWeb2) {
IServiceProvider* psp;
HRESULT hr = punkSite->QueryInterface(IID_IServiceProvider, (void **)&psp);
if (SUCCEEDED(hr))
{
hr = psp->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (void **)pWeb2);
psp->Release();
}
return hr;
}

HRESULT Doc2FromWeb2(IWebBrowser2 *pWeb2, IHTMLDocument2 **ppDoc2) {
CComPtr<IDispatch> spDisp;
HRESULT hr = pWeb2->get_Document(&spDisp);
if (SUCCEEDED(hr) && spDisp)
{
hr = spDisp->QueryInterface(IID_IHTMLDocument2, (void**)ppDoc2);
} else {
hr = E_FAIL;
}
return hr;
}

HRESULT Doc2FromSite(IUnknown *punkSite, IHTMLDocument2 **ppDoc2) {
CComPtr<IWebBrowser2> spWeb2;
HRESULT hr = Web2FromSite(punkSite, &spWeb2);
if (SUCCEEDED(hr)) {
hr = Doc2FromWeb2(spWeb2, ppDoc2);
}
return hr;
}

关于c# - BHO 在每个页面上执行 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19186234/

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