IE 扩展,用于在网页中注入 JavaScript
IE extension to inject javascript in the webpage
我已经使用C++实现了IE扩展。它的功能是每当单击扩展图标时,都会在网页的头部标签中注入javascript。我已经使用了execScript
脚本注入的方法。
它工作正常,但是当我刷新网页时,或者当我单击网页上的任何链接时,或者当我输入另一个 URL 时,注入的脚本会消失。
我不希望脚本消失,我希望它在 Web 浏览器中持久存在。
我怎样才能做到这一点?我是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 方法下添加这段代码。使用用于设置事件处理的接收器映射。下面提供了一个示例。
BEGIN_SINK_MAP(CMyClass)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2,DISPID_DOCUMENTCOMPLETE , OnDocumentComplete)
END_SINK_MAP()
在类文件中实现文档完成。
void STDMETHODCALLTYPE CMyClass::OnDocumentComplete(IDispatch *pDisp,VARIANT *pvarURL)
{
//Inject the scripts here
}
更新:
我还没有尝试过这个,但我想 下载开始 事件会满足您的目的。它类似于映射的文档完成事件,唯一不同的是DISPID_DOWNLOADBEGIN。将相应的处理程序方法映射到 DISPID 并尝试一下。
BEGIN_SINK_MAP(CMyClass)
SINK_ENTRY_EX(1,DIID_DWebBrowserEvents2,DISPID_DOWNLOADBEGIN, OnDocumentLoad)
END_SINK_MAP()
类似于文档完成处理程序方法
void STDMETHODCALLTYPE CMyClass::OnDocumentLoad(IDispatch *pDisp,VARIANT *pvarURL)
{
//Inject scripts here
}
http://msdn.microsoft.com/en-us/library/cc136547(v=vs.85).aspx
相关文章:
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 嘿,我正在尝试将此c ++转换为javascript,但有些东西不起作用
- 无法使用加载库卸载注入的 dll (C++)
- 将 dll 文件注入 UWP
- 将具有固定签名的自定义函数名称注入 CRTP
- C++中的 JavaScript 样式闭包
- 发生注入类名时会发生什么情况?(C++)
- OpenCV(C++)处理来自JavaScript / Web Assembly的图像数据
- 作为指针注入类后重新创建堆栈对象不好吗?
- 如何使用可视化代码和平台IO将环境变量注入CPP文件?
- 限定的依赖名称查找,其中包含基类的注入类名
- 如何在窗口中使用注入的 dll 中的参数调用函数
- 在C++中嵌入 Mozilla 的 JavaScript 引擎
- PostgresSQL - SQL Ready 语句与字符串转义,防止 SQL 注入攻击
- Javascript 找不到使用 emscripten 编译的导出 WASM 函数
- 在Javascript和C++中计算MD5哈希的不同结果
- 将Wiimote MAC地址转换为PIN码,从C++转换为Python或Javascript
- IE扩展-正在注入Javascript文件
- IE 扩展,用于在网页中注入 JavaScript