gpt4 book ai didi

javascript - 用于在网页中注入(inject) javascript 的 IE 扩展

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:07 24 4
gpt4 key购买 nike

我已经使用 C++ 实现了一个 IE 扩展。它的功能是在点击扩展图标时,在网页的 head 标签中注入(inject) javascript。我使用了 execScript 方法进行脚本注入(inject)。
它工作正常,但是当我刷新网页,或者当我点击网页上的任何链接,或者当我输入另一个 URL 时,注入(inject)的脚本消失了。
我不希望脚本消失,我希望它在网络浏览器中持久存在。
我怎样才能做到这一点?我是 IE 扩展开发的新手,非常感谢任何帮助。
谢谢。

STDMETHODIMP CBlogUrlSnaggerAddIn::Exec(
const GUID *pguidCmdGroup, DWORD nCmdID,
DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut){
HRESULT hr = S_OK;
CComPtr<IDispatch> spDispDoc;
hr = m_spWebBrowser->get_Document(&spDispDoc);
if (SUCCEEDED(hr)){
CComPtr<IDispatch> spDispDoc;
hr = m_spWebBrowser->get_Document(&spDispDoc);
if (SUCCEEDED(hr) && spDispDoc){
CComPtr<IHTMLDocument2> spHTMLDoc;
hr = spDispDoc.QueryInterface<IHTMLDocument2>( &spHTMLDoc );
if (SUCCEEDED(hr) && spHTMLDoc){
VARIANT vrt = {0};
CComQIPtr<IHTMLWindow2> win;
hr = spHTMLDoc->get_parentWindow(&win);
CComBSTR bstrScript = L"function fn() {alert('helloooo');}var head = document.getElementsByTagName('head')[0],script = document.createElement('script');script[script.innerText ? 'innerText' : 'textContent'] = '(' + fn + ')()';head.appendChild(script);head.parentNode.replaceChild(script,'script');";
CComBSTR bstrLanguage = L"javascript";
HRESULT hrexec = win->execScript(bstrScript,bstrLanguage, &vrt);
}
}}

最佳答案

与其在 Exec 事件中编写 execScript 代码,不如尝试在 OnDocumentComplete 方法下添加一段代码。使用用于设置事件处理的 Sink 映射。下面提供了一个示例。

BEGIN_SINK_MAP(CMyClass)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2,DISPID_DOCUMENTCOMPLETE , OnDocumentComplete)

END_SINK_MAP()

在您的类文件中实现 DocumentComplete。

void STDMETHODCALLTYPE CMyClass::OnDocumentComplete(IDispatch *pDisp,VARIANT *pvarURL)
{
//Inject the scripts here
}

更新:

我还没有试过这个,但我想 DownloadBegin 事件可以满足你的目的。它类似于映射的文档完成事件,唯一不同的是 DISPID_DOWNLOADBEGIN。将相应的处理程序方法映射到 DISPID 并尝试一下。

BEGIN_SINK_MAP(CMyClass)
SINK_ENTRY_EX(1,DIID_DWebBrowserEvents2,DISPID_DOWNLOADBEGIN, OnDocumentLoad)
END_SINK_MAP()

类似于DocumentCompleteHandler方法

void STDMETHODCALLTYPE CMyClass::OnDocumentLoad(IDispatch *pDisp,VARIANT *pvarURL)
{
//Inject scripts here
}

http://msdn.microsoft.com/en-us/library/cc136547(v=vs.85).aspx

关于javascript - 用于在网页中注入(inject) javascript 的 IE 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20995136/

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