1

我在 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);
}

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

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

或者

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

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

4

1 回答 1

0

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

因此,您应该首先检查是否是第一次为实际站点请求触发 OnDocumentComplete 事件。如果是,请添加您的 javascript,如果不是,则不执行任何操作。

这应该防止双重 jQuery 包含。

于 2013-02-28T05:35:10.293 回答