IE扩展在网页中注入javascript 我使用C++实现了IE扩展。它的功能是在每次单击扩展图标时,将javascript注入网页的head标记中。我使用了execScript方法进行脚本注入。 它工作正常,但当我刷新网页时,或当我单击网页上的任何链接时,或当我输入另一个URL时,注入的脚本就会消失。 我不希望脚本消失,我希望它在web浏览器中保持不变。 我怎样才能做到这一点?我是IE扩展开发新手,非常感谢您的帮助。 谢谢 STDMETHODIMP CBlogUrlSnaggerAddIn::Exec( 常量GUID*pguidCmdGroup,DWORD nCmdID, DWORD nCmdExecOpt,VARIANTARG*pvaIn,VARIANTARG*pvaOut){ HRESULT hr=S_正常; CComPtr spDispDoc; hr=m_spWebBrowser->get_Document(&spDispDoc); 如果(成功(hr)){ CComPtr spDispDoc; hr=m_spWebBrowser->get_Document(&spDispDoc); if(成功(hr)和spDispDoc){ 斯普特姆多克司令部; hr=spDispDoc.QueryInterface(&spHTMLDoc); if(成功(hr)和spHTMLDoc){ 变量vrt={0}; CComQIPtr-win; hr=spHTMLDoc->get\u parentWindow(&win); ccombstrscript=L“函数fn(){alert('hellooo');}var head=document.getElementsByTagName('head')[0],script=document.createElement('script');script[script.innerText?'innerText':'textContent']='('+fn+'))();head.appendChild(script);head.parentNode.replaceChild(script,'script');”; ccombstrlanguage=L“javascript”; HRESULT hrexec=win->execScript(bstrScript、bstrLanguage和vrt); } }}

IE扩展在网页中注入javascript 我使用C++实现了IE扩展。它的功能是在每次单击扩展图标时,将javascript注入网页的head标记中。我使用了execScript方法进行脚本注入。 它工作正常,但当我刷新网页时,或当我单击网页上的任何链接时,或当我输入另一个URL时,注入的脚本就会消失。 我不希望脚本消失,我希望它在web浏览器中保持不变。 我怎样才能做到这一点?我是IE扩展开发新手,非常感谢您的帮助。 谢谢 STDMETHODIMP CBlogUrlSnaggerAddIn::Exec( 常量GUID*pguidCmdGroup,DWORD nCmdID, DWORD nCmdExecOpt,VARIANTARG*pvaIn,VARIANTARG*pvaOut){ HRESULT hr=S_正常; CComPtr spDispDoc; hr=m_spWebBrowser->get_Document(&spDispDoc); 如果(成功(hr)){ CComPtr spDispDoc; hr=m_spWebBrowser->get_Document(&spDispDoc); if(成功(hr)和spDispDoc){ 斯普特姆多克司令部; hr=spDispDoc.QueryInterface(&spHTMLDoc); if(成功(hr)和spHTMLDoc){ 变量vrt={0}; CComQIPtr-win; hr=spHTMLDoc->get\u parentWindow(&win); ccombstrscript=L“函数fn(){alert('hellooo');}var head=document.getElementsByTagName('head')[0],script=document.createElement('script');script[script.innerText?'innerText':'textContent']='('+fn+'))();head.appendChild(script);head.parentNode.replaceChild(script,'script');”; ccombstrlanguage=L“javascript”; HRESULT hrexec=win->execScript(bstrScript、bstrLanguage和vrt); } }},javascript,c++,internet-explorer,code-injection,Javascript,C++,Internet Explorer,Code Injection,尝试在OnDocumentComplete方法下添加代码段,而不是在Exec事件中写入execScript代码。使用用于设置事件处理的接收器映射。下面提供了一个示例 BEGIN_SINK_MAP(CMyClass) SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2,DISPID_DOCUMENTCOMPLETE , OnDocumentComplete) END_SINK_MAP() 在类文件中实现DocumentComplete void STDME

尝试在OnDocumentComplete方法下添加代码段,而不是在Exec事件中写入execScript代码。使用用于设置事件处理的接收器映射。下面提供了一个示例

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\u DownloadBegin。将相应的处理程序方法映射到DISPID并尝试一下

BEGIN_SINK_MAP(CMyClass)
    SINK_ENTRY_EX(1,DIID_DWebBrowserEvents2,DISPID_DOWNLOADBEGIN, OnDocumentLoad)
END_SINK_MAP()
类似于DocumentComplete处理程序方法

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


请调用<代码> ExcScript < /COD>始终在页面加载时脚本只在单击扩展图标时才被注入。@ GrunDy请看代码并建议您在哪里添加代码。请参阅VE和@ GrunDy。这是在VB中。您能提供C++中的任何示例吗?我会尝试一下,并将让您知道它是否工作。谢谢。r您的回复。我们是否可以将脚本注入页面,使其在页面加载之前执行?
void STDMETHODCALLTYPE CMyClass::OnDocumentLoad(IDispatch *pDisp,VARIANT *pvarURL)
{
   //Inject scripts here
}