首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BHO Internet Explorer插件-脚本插入问题

BHO Internet Explorer插件-脚本插入问题
EN

Stack Overflow用户
提问于 2016-01-08 19:29:22
回答 1查看 881关注 0票数 1

我有一个BHO (IE插件),它将javascript注入到目标页面:

代码语言:javascript
运行
复制
string inject = "<div style=\"display:none\">injected <script type=\"text/javascript\" defer=\"defer\">" + js +
        "</script></div>";
    body->insertAdjacentHTML(CComBSTR("afterBegin"), CComBSTR(inject.c_str()));

我可以在IE (F12)的开发人员控制台中看到,脚本在IE9和IE11上都被正确注入。问题是该脚本仅在IE9上执行。IE11不会执行该脚本。造成这种差异的原因可能是什么?IE11是否为了某种类型的安全改进而阻止这种情况?是否可以修改BHO以使此脚本也在IE11上执行?

EN

回答 1

Stack Overflow用户

发布于 2016-01-28 17:42:50

我能够让它在IE10和IE11上工作。我没有使用insertAdjacentHTML进行注入,而是使用了appendChild方法并将HTMLScriptElement附加到该方法中。下面是我的代码的摘录。

代码语言:javascript
运行
复制
LOG(_T("Beginning script injection"));

    CComPtr<IHTMLElement> htmlElement;

    if (!SUCCEEDED(hr = doc->createElement(CComBSTR("script"), &htmlElement)))
    {
        LOG_ERROR(_T("createElement of type script failed"), hr);
        return;
    }


    CComPtr<IHTMLScriptElement> htmlScript;
    if (!SUCCEEDED(hr = htmlElement.QueryInterface<IHTMLScriptElement>(&htmlScript)))
    {
        LOG_ERROR(_T("QueryInterface<IHTMLScriptElement> failed"), hr);
        return;
    }


    htmlScript->put_type(CComBSTR("text/javascript"));
    htmlScript->put_text(CComBSTR(js.c_str()));


    CComPtr<IHTMLDocument3> htmlDocument3;
    if (!SUCCEEDED(hr = doc.QueryInterface<IHTMLDocument3>(&htmlDocument3)))
    {
        LOG_ERROR(_T("QueryInterface<IHTMLDocument3> failed"), hr);
        return;
    }

    CComPtr<IHTMLElementCollection> htmlElementCollection; 
    if (!SUCCEEDED(hr = htmlDocument3->getElementsByTagName(CComBSTR("head"), &htmlElementCollection ) ) )
    {
        LOG_ERROR(_T("getElementsByTagName failed"), hr);
        return;
    }

    CComVariant varItemIndex(0);
    CComVariant varEmpty;

    CComPtr<IDispatch> dispatchHeadElement;
    if (!SUCCEEDED(hr = htmlElementCollection->item(varEmpty, varItemIndex, &dispatchHeadElement )) )
    {
        LOG_ERROR(_T("item failed"), hr);
        return;
    }


    if (dispatchHeadElement == NULL )
    {
        LOG_ERROR(_T("dispatchHeadElement == NULL"), hr);
        return;
    }



    CComQIPtr<IHTMLDOMNode, &IID_IHTMLDOMNode> spHeadNode = dispatchHeadElement; // query for DOM interfaces
    CComQIPtr<IHTMLDOMNode, &IID_IHTMLDOMNode> spNodeNew = htmlScript; 


    if (spHeadNode)
    {

        if (!SUCCEEDED(hr = spHeadNode->appendChild(spNodeNew, NULL)))
        {

            LOG_ERROR(_T("dispatchHeadElement == NULL. Script injection failed"), hr);
            return;
        }

        LOG(_T("Script injection SUCCESS!"));

    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34676017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档