BHO插件(Microsoft JScript运行时错误)

时间:2012-11-26 06:47:57

标签: c# javascript regex internet-explorer bho

我在C#中构建了一个BHO(浏览器助手对象),用于检测网页中的电话号码,并在其旁边放置带有超链接的图像。 BHO基本上插入一个javascript,它使用正则表达式字符串来查找电话号码并在其旁边添加图像。

这是相关代码

public void OnDocumentComplete(object pDisp, ref object URL)
{
        HTMLDocument document = (HTMLDocument)webBrowser.Document;

        IHTMLElement head = (IHTMLElement)((IHTMLElementCollection)
        document.all.tags("head")).item(null, 0);

        IHTMLScriptElement scriptObject =
        (IHTMLScriptElement)document.createElement("script");
        scriptObject.src = "\nhttp://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js";
        ((HTMLHeadElement)head).appendChild((IHTMLDOMNode)scriptObject);

        IHTMLScriptElement scriptObject2 =
        (IHTMLScriptElement)document.createElement("script");
        scriptObject2.text = "\nwindow.onload = function()"+
                                                "{"+
                                                      "$('body').html( $('body').html().replace(/(\\d\\d\\d\\d\\s\\d\\d\\d\\s\\d\\d\\d)/g,'$1 <a href=\"http://www.somewebsite.com\"><img src=\"image.png\" border=\"0\"></a>') );"
                                                +"}"+
                               "\n\n";
        ((HTMLHeadElement)head).appendChild((IHTMLDOMNode)scriptObject2);
}

我在一个非常简单的网页上测试了BHO,电话号码很少。它按预期工作。但是,当我在网上测试BHO与任何其他页面时,我得到以下错误

Microsoft JScript运行时错误:对象不支持此属性或方法

Microsoft JScript运行时错误:权限被拒绝

我为其他几个页面收到Microsoft JScript运行时错误。这是否意味着我不允许在页面中插入javascript?可能是什么原因 ?我希望这是正确的方法。

1 个答案:

答案 0 :(得分:0)

我认为错误是因为你多次向你加载的网站添加jQuery。您是否曾尝试在OnDocumentComplete方法中设置断点? 如果这样做,您将看到每个站点请求多次触发OnDocumentComplete事件。

因此,您应首先检查是否是第一次针对实际网站请求触发OnDocumentComplete事件。如果是这样,请添加javascript,如果没有,则不执行任何操作。

这应该可以防止双jQuery包含。